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

标签 java logging log4j slf4j appender

如何将 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=<%d{yyyy-MM-dd HH:mm:ss}> %-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=<%d{yyyy-MM-dd HH:mm:ss}> %-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=<%d{yyyy-MM-dd HH:mm:ss}> %-5p : %C{1} %c{2} : %m%n
log4j.appender.RootErrorAppender.threshold=error

最佳答案

我在检索 Udo Klimaschewski 所指的 Udo Klimaschewski 的回答时遇到了麻烦,所以我将我的解决方案放在这里。 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

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

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

关于java - 使用 log4j 每次运行一个日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19132433/

相关文章:

logging - 在 xamarin studio 中激活日志输出

java - log4j FileAppender 是线程安全的吗?我可以即时更改文件名吗?

Log4j - 优先级值和参数名概念解释

java - Solr - 如何区分 to* 和 to *

java - Logback 无法正确清理文件

c# - Log4Net:将 C# 对象(除了 Exception)写入日志?

java - 通过 DI 在 Spring Framework 中正确使用 LOG4J

java - 如何修复 Jhipster aws 子生成器失败并出现 "Unable to parse command line options: Unrecognized option: -ntp"错误

java - 在 2 个或更多 HTML 页面中使用 1 个 Applet 的实例

java - 使用 App Engine 端点和 Java 在 Android 上自制身份验证