为什么Log4j2的JsonLayout + KeyValuePair打印空的logEvent消息?

3

TL;DR

使用JsonLayout和嵌套的KeyValuePair在我的log4j2.xml配置中,日志消息为空。有什么想法吗?

Long Story

我正在使用Tomcat 8.5.43,并使用以下与日志记录相关的JAR包:

  • jackson-annotations-2.9.7.jar
  • jackson-core-2.9.7.jar
  • jackson-databind-2.9.7.jar
  • slf4j-api-1.7.25.jar
  • jcl-over-slf4j-1.7.25.jar
  • log4j-api-2.12.0.jar
  • log4j-core-2.12.0.jar
  • log4j-jul-2.12.0.jar
  • log4j-slf4j-impl-2.12.0.jar
  • tomcat-extras-juli-8.5.2.jar(作为/bin中的tomcat-juli.jar)
  • tomcat-extras-juli-adapters-8.5.2.jar
  • log4j-web-2.12.0.jar(在Web应用程序中)

并且使用下面的log4j2.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
  <Console name="consoleappender" target="SYSTEM_OUT">
    <JsonLayout compact="true" eventEol="true" stacktraceAsString="true" locationInfo="true">
      <KeyValuePair key="foo" value="bar"/>
    </JsonLayout>
  </Console>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="consoleappender" />
    </Root>
  </Loggers>
</Configuration>

在setenv.sh文件中,我将classpath设置为:
CLASSPATH="$JAVA_HOME/lib/tools.jar\
:$CATALINA_HOME/lib/log4j-api.jar\
:$CATALINA_HOME/lib/log4j-core.jar\
:$CATALINA_HOME/lib/log4j-jul.jar\
:$CATALINA_HOME/lib/jackson-annotations.jar\
:$CATALINA_HOME/lib/jackson-core.jar\
:$CATALINA_HOME/lib/jackson-databind.jar"

使用额外的JVM参数运行Tomcat:

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dlog4j.configurationFile=file:log4j2.xml"

因此,最终应将所有Tomcat、JULI、Apache commons和Slf4j日志记录重定向到Log4J2。

不幸的是,我只看到了这个:{"logEvent":"","foo":"bar"}

而不是像下面这样的内容: {"thread":"main","level":"INFO","loggerName":"org.apache.catalina.startup.VersionLoggerListener","message":"Server version: Apache Tomcat/8.5.43","endOfBatch":false,"loggerFqcn":"org.apache.logging.log4j.jul.ApiLogger","threadId":1,"source":{"class":"org.apache.juli.logging.impl.Jdk14Logger","method":"log","file":"Jdk14Logger.java","line":87},"threadPriority":5,"instant":{"epochSecond":1562919500,"nanoOfSecond":701000000}}

如果我删除KeyValuePair,一切都能正常工作。

问题在哪里?


你会在控制台上看到这条消息。而且在控制台中,日志以摘要形式显示。如果你保存为文件而不是在控制台上显示,则会显示你所写的信息。 - hani
1个回答

5

我遇到了相同的问题。它与log4j-2.12.0有关,在2.11.2中可以正常运行。


这个答案是否回答了问题?请删除这里的评论并在原始问题下方重写。 - Adam
1
它实际上回答了这个问题。看起来他们有一个工单 - madhead

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接