Log4j在需要之前创建空文件

时间:2016-08-19 18:08:22

标签: file log4j appender

我的应用程序每15分钟运行一次,每天23小时。大部分时间,它“醒来”,看到没有数据需要处理和关闭。在初始化和输入数据检查期间,存在仅写入控制台的DEBUG日志语句。只有在应用程序找到要处理的数据后,它才会将任何内容写入日志文件(INFO级别和更高级别)。问题是,“没有要处理的数据”运行正在创建空的日志文件,即使没有任何内容写入它们。由于每天几乎打开100次,这种行为是不可取的。

如果不需要这些文件,我可以轻松实现手动删除这些文件的方法,但这看起来很糟糕。有没有办法让Log4j等待创建日志文件,直到实际写入它为止?谢谢!

log4j.properties的相关部分:

log4j.appender.myFileLogger=org.apache.log4j.RollingFileAppender
log4j.appender.myFileLogger.Append=false
log4j.appender.myFileLogger.File=D:/Imaging/myApp/logs/myApp_${current.date}.log
log4j.appender.myFileLogger.threshold=INFO
log4j.appender.myFileLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.myFileLogger.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1 个答案:

答案 0 :(得分:0)

如果有其他人遇到过这个问题,请查看我是如何解决这个问题的。'这样:

if(deleteLog) {
    FileAppender appender = (FileAppender)Logger.getRootLogger().getAppender("myFileLogger");
    String path = appender.getFile();
    Logger.shutdown();
    Files.delete(Paths.get(path));
}

这仍然感觉有点hackish,但它的工作原理不需要额外的配置点或硬编码文件路径。确保调用logger.shutdown(),否则Log4j仍然会在文件上打开一个句柄,抛出一个"另一个进程正在使用这个文件"错误。

Basil Musa的答案为此提供了基础:https://stackoverflow.com/a/9480213/5780475