java - log4j 干扰 - 级别一直设置为 "OFF"

标签 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. 我怎样才能阻止这种情况发生,并强制执行我设置的级别?

谢谢:)

最佳答案

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

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

关于java - log4j 干扰 - 级别一直设置为 "OFF",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15499339/

相关文章:

java - 如何用新值替换现有值

java - 如何显示发布到我的论坛中的答案数量?

java - 配置 Jersey 1.18.x 服务器以进行 JSON POJO 映射

java - JLabel 上的动态 Swing 刷新

java - 在 weblogic 与 tomcat 中访问 session 属性

eclipse - 如何在Eclipse Juno中运行Servlet?

java - 如何防止 servlet 缓冲响应内容

Java RMI 和 netstat 输出

java - Scala库初始化设计

java.lang.NoClassDefFoundError 与 tomcat 和 axis2