我正在升级运行在Tomcat 8上的Web应用程序的log4j版本。我正在从1.2.12升级到最新的2.11.1。
该应用程序正在使用Maven。所以我将以下依赖项添加到我的应用程序pom.xml
(版本在父pom中管理):
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</dependency>
我删除了旧的配置文件log4j.properties
,并将其替换为log4j2.xml
文件夹中的新src/main/resources
文件(在我的log4j2文件内容下面找到)。
当我直接运行main
函数时,日志正确地写在控制台和文件中。但是,当我在Tomcat上部署应用程序并运行它时,不会写入任何日志。
我检查了我的应用程序WAR,这两个库都存在于WEB-INF/lib
文件夹中。我还测试了将log4j-1 **的排除项添加到依赖于它的外部库,但没有任何改变......
有人已经有同样的问题,你是如何纠正的?
此致,马修
PS:我的log4j2.xml文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status=WARN strict="true">
<Properties>
<Property name="pattern">%d [%t] (%F:%L) %x %-5p [%c{1}] %m%n</Property>
<Property name="filePath">C:/temp/logs/my_app/my_app.log</Property>
</Properties>
<Appenders>
<Appender type="Console" name="STDOUT">
<Layout type="PatternLayout" pattern="${pattern}"/>
</Appender>
<Appender type="RollingFile" name="FILE" fileName="${filePath}" filePattern="${filePath}.%i">
<Layout type="PatternLayout" pattern="${pattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="500KB"/>
</Policies>
<DefaultRolloverStrategy max="1"/>
</Appender>
</Appenders>
<Loggers>
<Logger name="my.package.debug" level="DEBUG" additivity="false">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="FILE"/>
</Logger>
<Root level="WARN">
<AppenderRef ref="STDOUT"/>
<AppenderRef ref="FILE"/>
</Root>
</Loggers>
</Configuration>
我终于找到了我的问题,这是由于另一个库(infinispan-embeded)重新定义了Log4j类,比如LogManager。我正在加载thoses类而不是log4j库中的类,它们的版本比我想要的版本要旧。
我刚刚更换了库,日志正确写入文件中。