每次使用log4j运行一个日志文件

如何将log4j.properties配置为每次运行应用程序时只有一个日志文件。 我已经读过你应该在文件名中使用时间戳,但随着时间的推移,每次运行会创建许多文件。

我尝试过DailyRollingFileAppender和RollingFileAppender但是找不到一种方法来为每次运行配置一个日志。 不应将日志分成多个日志,也不应截断日志,应保留旧运行的文件。

每个类都有一个静态的org.slf4j.Logger,它有自己的类名:

private static final Logger log = LoggerFactory.getLogger(Foo.class); 

这是我当前的log4j.properties

 log4j.rootLogger=error, RootAppender, RootErrorAppender #log4j.logger.com.example=info, qspaBackendAppender, stderr log4j.logger.com.example=info, qspaBackendAppender log4j.additivity.com.example=true #log4j.logger.com.example.util=trace, qspaBackendAppender, stderr #log4j.additivity.com.example.util=true log4j.appender.qspaBackendAppender=org.apache.log4j.DailyRollingFileAppender log4j.appender.qspaBackendAppender.file=logs/qspaBackend.log log4j.appender.qspaBackendAppender.layout=org.apache.log4j.PatternLayout log4j.appender.qspaBackendAppender.layout.ConversionPattern= %-5p : %C{1} %c{2} : %m%n log4j.appender.stderr=org.apache.log4j.ConsoleAppender log4j.appender.stderr.Target=System.err log4j.appender.stderr.layout=org.apache.log4j.PatternLayout log4j.appender.stderr.layout.ConversionPattern=%-5p %c{1}:%L - %m%n log4j.appender.RootAppender=org.apache.log4j.RollingFileAppender log4j.appender.RootAppender.file=logs/root.log log4j.appender.RootAppender.layout=org.apache.log4j.PatternLayout log4j.appender.RootAppender.layout.ConversionPattern= %-5p : %C{1} %c{2} : %m%n log4j.appender.RootErrorAppender=org.apache.log4j.RollingFileAppender log4j.appender.RootErrorAppender.file=logs/rootError.log log4j.appender.RootErrorAppender.layout=org.apache.log4j.PatternLayout log4j.appender.RootErrorAppender.layout.ConversionPattern= %-5p : %C{1} %c{2} : %m%n log4j.appender.RootErrorAppender.threshold=error 

结合Udo Klimaschewski的答案和这个问题的答案,以获得理想的结果。

  1. 添加属性append = false
  2. 添加current.time系统属性并在文件名中使用它

我有麻烦检索Udo Klimaschewski的回答是Udy所指的,所以我把我的解决方案放在这里。 log4j.properties:

 # Root logger option log4j.rootLogger=INFO, fileout # Direct log messages to file log4j.appender.fileout=org.apache.log4j.FileAppender log4j.appender.fileout.File=/logs/myapp_${current.date}.log log4j.appender.fileout.ImmediateFlush=true log4j.appender.fileout.Threshold=debug log4j.appender.fileout.Append=false log4j.appender.fileout.layout=org.apache.log4j.PatternLayout log4j.appender.fileout.layout.conversionPattern=%5p | %d | %m%n 

然后把这个块放在主类中:

 public class Starter { static{ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hhmmss"); System.setProperty("current.date", dateFormat.format(new Date())); } 

要在应用启动时启动新的日志文件,您可能需要使用OnStartupTriggeringPolicy

触发政策

XML配置示例:

    C:/Logs/          %d{dd/MM/yyyy HH:mm:ss} [%-5p/%t]: %C{1}(%L): %m%n                   

对我来说效果很好