Java 定制 Logger 出现多个 log及对应lck文件
2022-05-24 本文已影响0人
小强开学前
前面文章有提到定制 Logger 的需求。
String pattern = logDir.getAbsolutePath() + File.separator + "MY_LOG.log";
// 文件路径,文件大小限制,文件个数限制,是否是追加模式
FileHandler fileHandler = new FileHandler(pattern, limit, 1, true);
mLogger.addHandler(fileHandler);
Log 文件
今天发现如题对应的问题,多个 Log 文件探寻一番发现是因为我们获取的Logger对象是全局单例。
添加过 Handler 它会一直存在,再添加就会导致重复。
测试每次进页面它都会多添加2个Handler
mLogger.getHandlers().length: 0
mLogger.getHandlers().length: 2
mLogger.getHandlers().length: 4
而Handler写文件时内部有线程安全的保证。
所以即使我们设置了最多只生成一个文件,但由于这个文件被之前的 Handler 长期占用,所以后面的Handler会生成带数字后缀的文件来写入日志。
LCK文件
这个文件的存在就是前面所说的为了“写”日志过程的安全。
简单来说,handler 关闭,lck文件应该被删除。一般来说我们也不用维护。
但是JDK8 确实有Logger 相关的错误,StackOverFlow 有这类的讨论�。