这件事我已经忙了好几天了,还没弄明白。如果添加log4j1兼容性库,则Log4j2向后兼容。
我的web-inf\lib有:
我的网络。xml有:
<!-- log4j2 auto-wiring -->
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///${catalina.base}/conf/log4j2.xml</param-value>
</context-param>
My[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)升级到log4j2api,它们可以完美地工作/log。不受我控制但针对log4j1(com.mycompany.componentA)编写的代码根本无法登录。没有错误,没有调试,什么都没有。
不过有些有趣的事。。。当我启动应用程序时,会收到一条关于应用程序启动时配置不正确的log4j1警告。这也让我感到困惑,因为战争中没有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.
如果不在WEB-INF/lib中,那么可能在您的WEB容器(Tomcat?)中共享库文件夹?Ralph是对的,这个错误消息是由Log4j-1.2生成的,所以它在类路径的某个地方。。。尝试打印系统属性java的值。班路径
(如有必要)。
更新:另一种找到Log4j1 jar位置的方法是打印org.apache.log4j的值。AppenderSkeleton.class.get资源(/org/apache/log4j/AppenderSkeleton.class)
从您的应用程序。
(我最初建议类别
,但这也存在于Log4j 1桥中,所以AppenderSkeleton
更好。)
该错误消息意味着您仍然拥有log4j-1。在您的应用程序中使用xjar。在WEB-INF/lib中查找并删除它,然后它就可以工作了。
编辑:我(终于)明白发生了什么。我的一个依赖项做了一件可怕的坏事,并将log4j1类捆绑到它的最后一个jar中。所以类路径上没有log4j1 jars,但是类路径上有log4j1类。
我能让这项工作正常进行的唯一方法是:
这可能是非常不正确的,但如上所述,这是我在几周的闲逛后让它工作的唯一方法。
我对lo4j1网桥的理解是,连接log4j2并包括网桥是所有应该需要的(例如,不需要手动连接log4j1)。实际上,这似乎没有发生。
我正在将grails 2.5.4应用程序中的log4j依赖项从1.2.17升级到最新版本2.17.1 我从BuildConfig.groovy中排除了log4j,并添加了与v2.17.1相关的以下依赖项: log4j api log4j核心 log4j-1.2-api log4j-slf4j-impl 我用的是log4-1。x桥接以减少总体代码基更改。 我添加了以下log4j2。conf目录下的属
是的,我已经阅读了所有相关的问题。我正在使用log4j2(尝试了2.4版和更新到最新的2.6.2版)。 我有一个面向客户的小型实用程序。我渴望将暴露的配置保持在最低限度。但对于有问题的情况,我还想添加一个标志,以便在运行时启用调试日志。 这是我启用调试日志记录的代码 但它实际上并不适用于这些情况: 实用程序通常在30秒内完成,因此更改应该是即时的。这是log4j2。xml 使用AppenderRe
我已经在weblogic 12c中配置了日志4j2。 我的文件已生成,但日志未写入文件中。我在这里发现了相同的问题,但我的附加器名称相同。我做错了什么? 任何面临同样问题的人。
我正在使用:import org.slf4j.logger;导入org.slf4j.loggerFactory; 有人能帮忙解决问题吗。
编写了简单的POC来证明和测试Spring Boot和log4j2的兼容性。一旦成功,我将把它移动到真正的应用程序。 请参考下面的maven依赖关系(来自POC): 如果我不排除Spring的logback,也不添加boot-starter-log4j2,那么应用程序日志会打印到应用程序文件中,但Spring日志根本不会打印。我感觉到了依赖的问题。感谢任何帮助。