问题描述
在使用Java logging的过程中,产生了许多.lck文件和带着后缀的重复文件。尝试使用记事本打开这两种文件,.lck文件为空,不同的重复文件中记录的是一条或者几条不同的log信息。而需求是要将这些所有的log信息记录到一个文件中。
.lck文件的作用
名副其实,lck是lock的缩写。这类文件其实之前我们也接触过,不过大都没有注意而已。比如说使用VMware虚拟机运行Linux系统过程中,虚拟机对应的文件夹就会产生一个.lck文件,当虚拟机关闭相应的文件也会自动删除。但是如果虚拟机异常关闭.lck文件保留的情况下,再运行这个虚拟机将会遇到类似虚拟机不存在的错误(曾经遇到过)。说到这里其实也能对它的作用做一些基本的判断了。.lck文件就是对文件的一种锁定方式,当文件处于被访问状态时,一部分处理机制就是生成.lck文件防止其他进程的读取。当对着个文件访问的进程正常结束时,该文件自动删除,保持可访问状态。
问题的处理方法
将lck文件全部删除,发现lck文件生成在程序运行阶段,但是关闭了以后并没被删除,手动删除以后再次运行,发现需要写入的log写入到了正确的文件中而不是另外生成一个带后缀的重名文件。考虑到是使用FileHandler过程中未调用close()方法来结束进程,于是在代码末尾添加了close()方法,发现仍会出现相同的问题,但是生成的重名文件变少了几个。问题没有解决,但是方向和思路应该就在这里。
然后我检查了我所有的代码,定义过FileHandler的地方