我已经在这个问题上敲了几天,但却无法理解。如果添加log4j1兼容性库,则Log4j2向后兼容。
我的web-inf \ lib有:
我的web.xml有:
<!-- log4j2 auto-wiring -->
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///${catalina.base}/conf/log4j2.xml</param-value>
</context-param>
我的[tomcat] /conf/log4j2.xml是:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="debug">
<Appenders>
<!-- Appends to CONSOLE -->
<Console name="consoleAppender" target="SYSTEM_OUT">
<ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY" />
<PatternLayout pattern="%5p (%F:%L) - %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="com.mycompany.componentA" level="WARN" />
<Logger name="com.mycompany.componentA.QueryLogger" level="DEBUG" />
<Logger name="com.mycompany.mycode" level="DEBUG" />
<Root level="WARN">
<AppenderRef ref="consoleAppender" />
</Root>
</Loggers>
</Configuration>
我已将我控制下的代码(com.mycompany.mycode)升级到log4j2 API,它们可以完美地工作/记录。不受我控制但是针对log4j1(com.mycompany.componentA)编写的代码根本无法完全记录。没有错误,没有调试,没有。
虽然有点有趣......当我启动应用程序时,我会在应用程序启动时收到有关错误配置的log4j1警告。这也让我感到困惑,因为WAR中没有log4j1库(兼容性API除外)。警告是:
log4j:WARN No appenders could be found for logger (com.mycompany.componentB)
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
答案 0 :(得分:1)
该错误消息表示您的应用程序中仍有log4j-1.x jar。在WEB-INF / lib中查找并删除它然后它应该可以工作。
答案 1 :(得分:1)
如果不在WEB-INF / lib中,那么可能在你的web容器(Tomcat?)中共享lib文件夹? Ralph是正确的,这个错误消息是由Log4j-1.2生成的,因此它位于类路径的某个地方......如果需要,请尝试打印系统属性java.class.path
的值。
更新:找到Log4j1 jar位置的另一种方法是从应用程序中打印org.apache.log4j.AppenderSkeleton.class.getResource("/org/apache/log4j/AppenderSkeleton.class")
的值。
(我最初建议Category
但这也存在于Log4j 1桥中,因此AppenderSkeleton
更好。)
答案 2 :(得分:1)
我能够实现这一目标的唯一方法是:
这可能是非常不正确的,但如上所述,这是我在经过数周的鬼混之后才能让它工作的唯一方法。
我对lo4j1网桥的理解是,连接log4j2并包括网桥应该是所有需要的(例如,不需要手动连接log4j1)。实际上,这似乎并没有发生。