log4j干扰 - 级别保持设置为“OFF”

时间:2013-03-19 12:19:51

标签: java tomcat servlets log4j

我正在尝试在我的应用程序中设置log4j,我的第三方JAR之一似乎以某种方式将我的日志级别变为“关闭”。它只发生在执行该库的代码时。我不知道它是如何做到这一点的,因为我没有使用它知道名称的记录器,而且我没有使用根记录器。我花了5个小时才完成这项工作,到目前为止,我唯一的成就就是获得超过9000的挫折感。

我在Windows 7 64位,Java 6 u23上使用最新的Tomcat(7.0.37)。

log4j.properties:

log4j.logger.com.foo.bar.SearchAndReport=TRACE, stdout, file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/logTest.log
log4j.appender.file.MaxFileSize=100KB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p] %d{dd MMM yyyy HH:mm:ss,SSS} - %C{2}.%M() - %m %n

然后在我的Servlet中进行测试我有:

Logger log = Logger.getLogger(SearchAndReport.class);
System.out.println(log.getLevel());

此代码在每次运行DoPost或DoGet时运行,并且级别保持在我设置的级别(TRACE),直到第三方代码运行并将其关闭。

我的问题是:

  1. 另一台记录器如何干扰我自己命名和设置的记录器?
  2. 如何阻止这种情况发生,并强制我设定的等级?
  3. 谢谢:)

1 个答案:

答案 0 :(得分:2)

  1. Log4j配置未合并,似乎其他配置存在且被读取而不是您的配置,或者配置被覆盖。在JAR中嵌入log4j配置文件是许多类似问题的根源。

  2. 您可以使用org.apache.log4j.PropertyConfiguratororg.apache.log4j.xml.DOMConfigurator在代码中重新加载配置。如果您的第三方代码未使用它们,请检查。