gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:51:16 33 4
gpt4 key购买 nike

长话短说如果我在 log4j2.xml 配置中使用带有嵌套 KeyValuePair 的 JsonLayout,则生成的日志消息为空。有什么想法吗?

说来话长

我将 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(在 webapp 中)

和 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="$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 args 运行 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":"服务器版本: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,一切都会按预期正常工作。

这里有什么问题?

最佳答案

我遇到了同样的问题。它与 log4j-2.12.0 有某种关系,在 2.11.2 中是可以的。

关于tomcat - 为什么 Log4j2 JsonLayout + KeyValuePair 打印空的 logEvent 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57003440/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com