几天来我一直在想这件事,却弄不清楚。如果添加Log4j2兼容性库,则log4j1是向后兼容的。
我的\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.
发布于 2016-08-01 07:09:46
编辑:我(终于)弄清楚了到底发生了什么。我的一个依赖项做了一件可怕的坏事,将log4j1类捆绑到它的最后一个jar中。因此,类路径上没有log4j1 jars,但类路径上有log4j1类。
我能做到这一点的唯一方法是:
这可能是可怕的不正确,但如上所述,这是唯一的方式,我让它工作了几个星期左右。
我对lo4j1桥的理解是,连接log4j2并包含该桥是应该需要的(例如,不需要手动连接log4j1)。在实践中,这种情况似乎没有发生。
发布于 2016-06-30 12:32:45
该错误消息意味着您的应用程序中仍然有log4j-1.xjar。在您的WEB/lib中查找并删除它,然后它就可以工作了。
发布于 2016-06-30 14:46:57
如果不在web /lib中,那么可能在您的web容器中(Tomcat?)共享库文件夹?拉尔夫是对的,这个错误消息是由Log4j-1.2生成的,所以它在某个地方的类路径上。如有必要,请尝试打印系统属性java.class.path
的值。
更新:另一种查找Log4j1 jar位置的方法是从应用程序中打印org.apache.log4j.AppenderSkeleton.class.getResource("/org/apache/log4j/AppenderSkeleton.class")
值。
(我最初建议使用Category
,但这也存在于Log4j 1桥中,因此AppenderSkeleton
更好。)
https://stackoverflow.com/questions/38128035
复制