log4j停止记录(某些)日志消息

3lxsmp7m  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(209)

我们在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,它有时仍然不起作用(包括收到警告):(

zbdgwd5y

zbdgwd5y1#

Reload4j是原始Log4j 1.2项目的一个分支。
因为类路径上有slf4j-reload4j,所以使用SLF4J执行的所有日志记录都发送到reload4jlog4j-1.2-api(它们使用相同的类名)。
您需要:

  • 通过删除slf4j-reload4j并添加log4j-slf4j-impl作为运行时依赖项,将SLF4J重定向至Log4j2 API,
  • 大多数库(尤其是现在)不是直接针对Log4j 1.x编码的,而是使用以下一种外观:Apache Commons Logging、SLF4J、JBoss Logging、Log4j2 API ...您 * 可能 * 可以从类路径中删除log4j-1.2-apireload4j或任何其他Log4j 1.x替换。

相关问题