【问题标题】:Creating separate log file for each application with log4j使用 log4j 为每个应用程序创建单独的日志文件
【发布时间】:2014-11-04 00:09:27
【问题描述】:

我知道之前有人问过很多次,我以为我知道答案,但我似乎仍然没有完美的解决方案。

我正在尝试使用 log4j 让不同的程序记录到不同的文件。这些程序不一定在不同的包中,但有些是。我有以下设置:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=ERROR, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n

# Log to a file for the ProgA 
log4j.logger.com.foo.apps.research.ProgA=INFO, ProgALog
log4j.additivity.com.foo.apps.research.ProgA=false
log4j.appender.ProgALog=org.apache.log4j.FileAppender
log4j.appender.ProgALog.File=/tmp/ProgA.log
log4j.appender.ProgALog.ImmediateFlush=true
log4j.appender.ProgALog.Threshold=info
log4j.appender.ProgALog.Append=false
log4j.appender.ProgALog.layout=org.apache.log4j.PatternLayout
log4j.appender.ProgALog.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n


# Log to a file for the ProgB program
log4j.logger.com.foo.apps.research.ProgB=INFO, ProgBLog
log4j.additivity.com.foo.apps.research.ProgB=false
log4j.appender.ProgBLog=org.apache.log4j.FileAppender
log4j.appender.ProgBLog.File=/tmp/ProgB.log
log4j.appender.ProgBLog.ImmediateFlush=true
log4j.appender.ProgBLog.Threshold=info
log4j.appender.ProgBLog.Append=false
log4j.appender.ProgBLog.layout=org.apache.log4j.PatternLayout
log4j.appender.ProgBLog.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n

# Log to a file for the ProgC program
log4j.logger.com.foo.apps.blah.ProgC=INFO, ProgCLog
log4j.additivity.com.foo.apps.blah.ProgC=false
log4j.appender.ProgCLog=org.apache.log4j.FileAppender
log4j.appender.ProgCLog.File=/tmp/ProgC.log
log4j.appender.ProgCLog.ImmediateFlush=true
log4j.appender.ProgCLog.Threshold=info
log4j.appender.ProgCLog.Append=false
log4j.appender.ProgCLog.layout=org.apache.log4j.PatternLayout
log4j.appender.ProgCLog.layout.ConversionPattern=%d [%t] %-5p (%F:%L) - %m%n

问题是每次我运行 3 个程序中的任何一个时,都会创建所有 3 个日志文件。只有适当的一个会被程序的日志消息填充,但仍然会为另外两个创建一个长度为 0 的日志文件。这显然不是我想要的。

谁能告诉我我做错了什么?

【问题讨论】:

    标签: java logging log4j log4j2


    【解决方案1】:

    您的问题似乎更多地与log4j 实例化日志文件的方式有关,而不是与实际的“多个应用程序-多个日志文件”部分有关。因此,如果我对您的理解正确,您真正想要实现的是设计一个文件附加程序定义,该定义指示以更 类似惰性 的方式创建日志文件(相反到默认值,即即时形成)。不过,据我所知,后者正是 log4j 的工作方式,没有快速简便的方法。

    编辑:请参阅对this SO question 的回复,以获得更详细的讨论和可能的问题解决方案。

    另一个快速解决方法是将您的 log4j.properties 文件分割成多个特定于子程序的部分,但根据您的应用程序所采用的约束和要求,这可能不是最理想的。 (同样,有关该特定解决方案的更多信息,请参阅this SO question)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多