每个类的Log4j,如何确定优先级?

时间:2009-09-22 15:22:00

标签: java log4j

我正在尝试使用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中的设置会覆盖这些吗?

4 个答案:

答案 0 :(得分:3)

您告诉您的类在DEBUG级别登录,但告诉appender忽略WARN和INFO以下的任何内容,因此您将看不到日志消息。

至于log4j.properties将被发现的顺序:

  1. WEB-INF /类
  2. WEB-INF / lib中的任何JAR
  3. common / classes(在tomcat目录中)
  4. 您投入使用的任何JAR /背书
  5. 您放入common / lib
  6. 的任何JAR
  7. 共享/类
  8. 您放入shared / lib
  9. 的任何JAR

    发现将在找到第一个文件时停止。

答案 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)

  1. 我认为你必须给mymodule一个appender,就像在

    中一样

    log4j.logger.com.mycompany.myapplication.mymodule = DEBUG,每日 log4j.additivity.com.mycompany.myapplication.mymodule =假

    此外,如果将additivity设置为false,则确保仅记录消息 由你指定的appender。

  2. jar的'root'通常不包含在CLASSPATH中,因此jar中的log4j.properties应该对JVM不可见。