closures日志文件

这个项目已经交给我了,所以我对此不甚了解。 有一种方法使用log(java.util.logging.Logger)并创build两个日志文件:

第一个文件:fileName.log

第二个文件:fileName.log.lck

在Linux中,当我做lsof ,我看到这两个文件是开放的。 我如何closures这两个文件?

我想closures这些文件的原因是这种方法每天运行多次,几个星期后打开文件的数量达到了一个限制(约1000),在这一点上,我们的系统停止工作。 当我们重新启动我们的进程(进行日志logging的“作业控制器”)时,打开的日志文件的数量变为0,并再次运行。

这就是做logging的工作

 private static Logger log = Logger.getLogger(MyClass.class.getPackage().getName()); try{ log.logp(Level.SEVERE, "com.MyClass", "run", "It failed"); } 

这是我试图closuresfinally块中的文件,但没有奏效

 finally{ Handler[] handler = log.getHandlers(); for(Handler h: handler){ h.close(); } } 

首先解决方案

如果你不想修改你的代码使用: 如何发送java.util.logging到log4j? java.util.logging.Logger到使用SLF4J的Logback?

我使用log4j或者logback 。 都有滚动文件附加程序(旧文件被删除)或日期/时间文件appender。

第二种方案

对于日志记录最好的用法是滚动文件。

 String filePattern = " fileName%.log"; int limit = 1000 * 1000; // 1 Mb int numLogFiles = 3; FileHandler fh = new FileHandler(filePattern, limit, numLogFiles); // Add to logger Logger logger = Logger.getLogger(MyClass.class.getPackage().getName()); logger.addHandler(fh); 

我不知道你是否可以添加全局文件处理程序。

我只是使用:

 LogManager.getLogManager().reset(); 

这将取消所有的日志设置(日志文件路径,文件名称模式,格式化程序…),但它将停止使用记录器关闭锁定文件并释放记录器