dfo*_*rce 3 logging tomcat slf4j log4j2 tomcat-juli
TL;DR 如果我在 log4j2.xml 配置中使用带有嵌套 KeyValuePair 的 JsonLayout,则生成的日志消息为空。任何想法为什么?
很长的故事
我将 Tomcat 8.5.43 与以下与日志相关的 JAR 一起使用:
和 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>
Run Code Online (Sandbox Code Playgroud)
在 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"
Run Code Online (Sandbox Code Playgroud)
并使用额外的 JVM 参数运行 Tomcat:
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dlog4j.configurationFile=file:log4j2.xml"
Run Code Online (Sandbox Code Playgroud)
所以每个 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
一切正常。
这里有什么问题?
归档时间: |
|
查看次数: |
1163 次 |
最近记录: |