我们在slf 4j和Spring 5.3.18下使用log4j运行一个相当典型但“遗留”的Web应用程序。(我将更新log4j/slf 4j的版本)我们使用在Tomcat启动时指定为-Dlog4j.configurationFile=our-log4j2.xml
的外部log4j配置文件。
不久前,我们注意到,当我们部署新版本的应用程序时,有时候日志并不显示。起初,我们以为这都是日志。出于某种原因,通过Jenkins管道进行的重新构建/重新部署似乎每次都能修复它。(我们现在有一个理论,构建正在做一些奇怪的事情,有时工作,有时不工作。稍后更多)经过一段时间,我们意识到我们确实通过根日志记录器得到了一些日志,但不是全部。现在我将放弃jsonfile配置。
<Root level="INFO">
<AppenderRef ref="jsonfile"/>
</Root>
最近,这个问题似乎越来越严重,一次重建往往不足以让它工作。唯一的运行时线索如下:在成功的log4j初始化序列(从 Catalina .out的日志推断)之后,我们得到普遍存在的:log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory)
- 本例显示ibatis,但有时是Spring相关类,有时是其他类。*
正如您可能怀疑的那样,当日志记录按预期工作时,我们不会在日志中获得此信息。
我很乐意应人们的要求提供支持信息,但一开始我很犹豫,因为这似乎不像是典型的“配置缺失/错误问题”,因为有时简单的重建/重新部署(一切都完全相同)会“修复”它。
一些可能相关的上下文信息:
- 同样,通过Jenkins构建的Maven部署到了Tomcat 9。
- 服务器为linux / AWS EC2。
我们对这件事真的很挠头。任何帮助/想法都很感激。
[更新3/2]我对Piotr评论的回复要么是错误的,要么是误导性的。我们一直在我们的POM中有以下内容。根据他最初的建议,包括这个依赖性是它工作的原因(有时):
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
</dependency>
当日志工作时,下面是我们的WEB-INF/lib的内容:
log4j-api-2.17.2.jar
log4j-core-2.17.2.jar
log4j-1.2-api-2.17.2.jar <<<
slf4j-api-1.7.35.jar
slf4j-reload4j-1.7.35.jar
每当我们删除log4j-1.2-api-2.17.2.jar
时,它都不起作用。不幸的是,即使存在依赖项/jar,它有时仍然不起作用(包括收到警告):(
1条答案
按热度按时间zbdgwd5y1#
Reload4j是原始Log4j 1.2项目的一个分支。
因为类路径上有
slf4j-reload4j
,所以使用SLF4J执行的所有日志记录都发送到reload4j
或log4j-1.2-api
(它们使用相同的类名)。您需要:
slf4j-reload4j
并添加log4j-slf4j-impl
作为运行时依赖项,将SLF4J重定向至Log4j2 API,log4j-1.2-api
、reload4j
或任何其他Log4j 1.x替换。