gpt4 book ai didi

java - 使用 log4j 为每个应用程序创建单独的日志文件

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:36 24 4
gpt4 key购买 nike

我知道这个问题之前已经被问过很多次了,我以为我知道答案,但我似乎仍然没有完美的解决方案。

我正在尝试使用 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 个日志文件。只有适当的一个会填充程序的日志消息,但仍会为其他 2 个创建 0 长度的日志文件。这显然不是我想要的。

有人可以告诉我我做错了什么吗?

最佳答案

看来您的问题更多地与 log4j 实例化日志文件的方式有关,而不是与实际的“多应用程序多日志文件”部分有关。因此,如果我理解正确的话,您真正想要实现的是设计一个文件附加器定义,该定义指示以更懒惰方式创建日志文件(与默认情况相反,即即时形成)。但据我所知,后者就是 log4j 的工作原理,并且没有快速简单的方法来解决它。

编辑:查看 this SO question 的回复进行更详细的讨论以及针对您的问题的可能解决方案。

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

关于java - 使用 log4j 为每个应用程序创建单独的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26717185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com