Java Log4j 2未在Spring 2.5 Tomcat应用程序中写入日志

Java Log4j 2未在Spring 2.5 Tomcat应用程序中写入日志,java,spring,maven,log4j,log4j2,Java,Spring,Maven,Log4j,Log4j2,我拿出了一个基于Spring2.5和Log4J1.2的旧项目,并开始将其升级到现在的库依赖项 更新Spring需要花费大量时间,所以我从其他库开始,并从Log4j 1.2更改为Log4j 2 我已经用maven enforcer插件修复了所有依赖性问题 我的maven依赖项现在看起来像这样: <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-

我拿出了一个基于Spring2.5和Log4J1.2的旧项目,并开始将其升级到现在的库依赖项

更新Spring需要花费大量时间,所以我从其他库开始,并从Log4j 1.2更改为Log4j 2

我已经用maven enforcer插件修复了所有依赖性问题

我的maven依赖项现在看起来像这样:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-api</artifactId>
  <version>2.11.2</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.11.2</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-1.2-api</artifactId>
  <version>2.11.2</version>
</dependency>
然后什么也没有了。。。其中日志条目的结尾应该是

我搜索了所有tomcat日志文件但没有成功-没有任何异常,也没有任何其他信息提示我的代码为什么不能使用Log4j2运行-有任何提示吗


当恢复到Log4J 1.2时,一切都如预期的那样工作。

< P>请考虑答案,以试图解决所描述的情况。 答案是“常见的”,因为这里有太多的事情会出错,在不知道代码和配置的情况下很难判断,这反映了我将如何完成这项任务

将log4j1.x迁移到log4j2.x并不像JAR切换那么简单。 因此,首先,确保您理解(并应用于您的代码库)这一点,一些导入应该被更改

然后,我认为您应该确保log4j1.x不会传播到应用程序的工件中(一个可能的原因是它被定义为可传递依赖项)

为了跟踪这一点,运行
mvn dependency:tree
,如果没有log4j1.xjars,那就好了

现在,有时(例如Spring本身),库,可能您自己的代码不直接使用log4j记录器,而是使用slf4j。 在这种情况下,需要将slf4j绑定到log4j2:

然后可以开始检查配置。 最好的方法是调试代码中有类似内容的应用程序:

 logger.info("Some message");

在那里放置一个断点,并检查您有什么类型的记录器,以及实际分配给它的附加器,可能网桥不工作,运行时的应用程序没有操作实现,或者,如果是真正的实现,可能是追加器分配不正确,消息没有发送到任何地方。

最后非常简单:

我从mvnrepository.com复制了依赖项(api、core),以便它们包含:

<scope>test</scope>
测试
它必须被删除-在此之后,我还必须修复最后一个依赖性问题-然后日志记录又回来了


最后但并非最不重要的一点是,属性的log4j转换器似乎没有真正完成,因此我并行添加了log4j2.properties以获得rollingAppender的结果。

我猜您需要更新日志配置,使其与log4j 2.x兼容。你读过吗?是的,我读过,这就是我使用网桥的原因。我还转换了日志配置,并将web.xml更改为指向log4j2.properties,但没有成功。正如前面所写的,我正在使用enforcer插件-因此这里所有的依赖项都是干净的。看来我只剩下调试了。。。
 logger.info("Some message");
<scope>test</scope>