我正在尝试使用Log4j允许每个特定类的调试日志记录,并且我有以下内容:
log4j.rootLogger=stdout, daily
log4j.logger.com.mycompany.myapplication.mymodule=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{h:mm:ssa} %5p (%F:%L) - %m%n
log4j.appender.stdout.threshold=warn
log4j.appender.daily=org.apache.log4j.DailyRollingFileAppender
log4j.appender.daily.layout=org.apache.log4j.PatternLayout
log4j.appender.daily.layout.ConversionPattern=%d{h:mm:ssa} %5p (%F:%L) - %m%n
log4j.appender.daily.File=/some/file/path/stuff
log4j.appender.daily.DatePattern=MMdd'.log'
log4j.appender.daily.threshold=info
如果这是作为tomcat的一部分的WEB-INF / classes / log4j.properties文件 应该看到来自mycompany.myapplication.mymodule
的调试消息,或者稍后文件中的条目是否覆盖它?< / em> (或者我是否完全改变了每个类的日志记录级别?)
其次, 如果jar文件中包含log4j.properties文件,我在Tomcat中的设置会覆盖这些吗?
答案 0 :(得分:3)
您告诉您的类在DEBUG级别登录,但告诉appender忽略WARN和INFO以下的任何内容,因此您将看不到日志消息。
至于log4j.properties
将被发现的顺序:
发现将在找到第一个文件时停止。
答案 1 :(得分:1)
对于您的第一个问题,我会说log4j.appender.daily.threshold=info
是个问题。我可能不会选择任何DEBUG消息。
通常情况下,我们不为appender提供阈值,为记录器配置级别。
我建议你使用log4j.xml而不是log4j.properties。 除了有用的验证之外,它还添加了一些有趣的功能或默认值。 我不记得究竟是哪个......
答案 2 :(得分:0)
是的,您似乎正在正确配置个人记录器。
不,他们不会被看到,因为你在两个高于DEBUG的appender上声明thresholds:
log4j.appender.stdout.threshold=warn
log4j.appender.daily.threshold=info
至于“其次,如果jar文件中包含log4j.properties文件,我在Tomcat中的设置会覆盖那些吗?”,我不确定你的意思。 log4j尝试从类路径加载log4j.xml或log4j.properties,并将使用它先找到的任何一个。 IIRC,Tomcat的共享lib文件夹中的条目取代每个应用程序的类路径。如果在WEB-INF / lib中的jar和WEB-INF / classes中的纯文本文件中都有log4j配置,那么你实际上是在运行时将硬币翻转到将要使用的硬币。
答案 3 :(得分:0)
我认为你必须给mymodule一个appender,就像在
中一样log4j.logger.com.mycompany.myapplication.mymodule = DEBUG,每日 log4j.additivity.com.mycompany.myapplication.mymodule =假
此外,如果将additivity设置为false,则确保仅记录消息 由你指定的appender。
jar的'root'通常不包含在CLASSPATH中,因此jar中的log4j.properties应该对JVM不可见。