这个项目已经交给我了,所以我对此不甚了解。 有一种方法使用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();
这将取消所有的日志设置(日志文件路径,文件名称模式,格式化程序…),但它将停止使用记录器关闭锁定文件并释放记录器