1. 本章任务
系统日志是一个完整系统必要的模块,便于我们再出现问题时还原当时的场景,比如数据库操作如果发生异常,最好就要记录日志。
本篇使用java自带的java.util.logging类库类记录日志,特点是简单快捷。
2. 基础类库
首先理解四个类:
//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;
3. 自定义异常处理工具类
了解这4个类之后,我们写一个异常日志处理工具类:
/**
* 日志工具类
*/
public class LogUtils {
// 日志记录器
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 writeLog(Level level, String content) {
// 设置日志级别,内容
LogRecord logRecord = new LogRecord(level, content);
// 记录一条日志
logger.log(logRecord);
}
}
该类将日志处理逻辑封装好了,只需要调用LogUtils.writeLog便可轻易记录日志。
4. 测试验证
登录成功后记录一条日志,修改LoginServlet。
user = lc.checkLogin(userName, userPassword);
if (user == null) {
// 跳转到错误提示页面,并提示用户不存在
tipInfo = "用户不存在";
page = "tip.jsp";
} else {
// 登录成功,记录用户信息到Session,同时跳转管理后台页面
// 记录日志
LogUtils.writeLog(Level.INFO, "登录成功:"+user.getUserName());
request.getSession().setAttribute("loginUser", user);
page = "index.jsp";
// 设置菜单
String[][] loginMenus = Constants.roleMenuMap.get(user.getUserRole());
request.getSession().setAttribute("loginMenus", loginMenus);
}
好的,测试下,点击登录,在D盘下日志文件中发现:
OVER,这个日志系统非常简单,但是也容易扩展。可以分别使用多个日志类,分别对应不同的文件、级别。推荐的做法是使用两个,一个记录登录用户的行为,一个记录系统运行的异常。