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 有这类的讨论�。

上一篇下一篇

猜你喜欢

热点阅读