本篇使用java自带的java.util.logging处理日志,特点是简单快捷。
首先理解四个类:
//Logger类是日志记录器
import java.util.logging.Logger;
//FileHandler类帮助Logger类处理文件
import java.util.logging.FileHandler;
//LogRecord类帮助Logger类处理日志中消息级别和内容
import java.util.logging.LogRecord;
//SimpleFormatter处理FileHandler保存格式
import java.util.logging.SimpleFormatter;
了解这4个类之后,我们写一个异常日志处理类:
package util;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
/**
* 异常日志类ExceptionLogger
* @author 猫哥
* @date 2017.2.24
*/
public class ExceptionLogger {
//日志记录器
public static Logger logger;
static{//初始化
try{
//给日志记录器起名
logger=Logger.getLogger("HomeworkSystem");
//日志相关的文件处理器
FileHandler fileHandler;
fileHandler = new FileHandler("d:\\log.txt");
//文件处理器相关的格式
SimpleFormatter formatter = new SimpleFormatter();
fileHandler.setFormatter(formatter);
//日志记录器使用fileHandler管理文件
logger.addHandler(fileHandler);
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//记录一条日志
public static void logInfo(String info){
//设置日志级别,内容
LogRecord logRecord = new LogRecord(Level.INFO, info);
//记录一条日志
logger.log(logRecord);
}
}
该类将日志处理逻辑封装好了,只需要调用ExceptionLogger.logInfo便可轻易记录日志。
猫哥想把异常信息都记录到日志里面,所以修改MyException类如下:
/**
* exception包:包含自定义异常类的包
*/
package exception;
import java.util.Date;
import util.ExceptionLogger;
public class MyException extends Exception{
private Date time;//记录异常发生时间
private String message;//原始异常信息,给程序员看,记录日志
private String info;//自定义信息,给用户看
public MyException(){
super();
}
public MyException(Date time,String msg,String info){
super();
this.time=time;
this.message=msg;
this.info=info;
//日志
ExceptionLogger.logInfo(msg+"##"+info);
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
}
好的,测试下,登录时输错密码后点击登录,在D盘下日志文件中发现:
二月 24, 2017 11:51:19 上午 util.ExceptionLogger logInfo
信息: LoginAction Error##登录失败!
OVER,这个日志系统非常简单,但是也容易扩展。可以分别使用多个日志类,分别对应不同的文件、级别。推荐的做法是使用两个,一个记录登录用户的行为,一个记录系统运行的异常。