2012-10-11 91 views
4

这个项目已经交给我了,所以我不太了解它。有在使用日志(java.util.logging.Logger中)的方法,它创建了两个日志文件:关闭日志文件

第一个文件:fileName.log

第二个文件:fileName.log.lck

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

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

这是什么做是为了做记录

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

这就是我试图做关闭在finally块的文件,但它没有工作

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

为什么要关闭这些文件? – jdevelop

+1

关闭这些文件可能会对您造成问题。 –

+0

几周后,当打开的文件数量达到一定限制(我认为它大约为1000)后,系统崩溃了。因此,当我们重新启动进程(作业控制器)时,打开的文件数量将回到0,一切正常。我们不需要每隔一段时间手动重新启动该过程,而是希望我们的代码能够执行此操作。 – Susie

回答

1

首先解决

如果你不想修改代码的使用:How to send java.util.logging to log4j? java.util.logging.Logger to Logback using SLF4J?我使用log4jlogback。都有滚动文件附加程序(旧文件被删除)或日期/时间文件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); 

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

5

我简单地使用:

LogManager.getLogManager().reset(); 

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