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,这个日志系统非常简单,但是也容易扩展。可以分别使用多个日志类,分别对应不同的文件、级别。推荐的做法是使用两个,一个记录登录用户的行为,一个记录系统运行的异常。