Tomcat 为什么log4j2jsonlayout&x2B;KeyValuePair打印空日志事件消息
TL;DR 如果在log4j2.xml配置中使用带有嵌套KeyValuePair的JsonLayout,则生成的日志消息为空。你知道为什么吗 说来话长 我将Tomcat 8.5.43与以下日志相关JAR一起使用:Tomcat 为什么log4j2jsonlayout&x2B;KeyValuePair打印空日志事件消息,tomcat,logging,log4j2,slf4j,tomcat-juli,Tomcat,Logging,Log4j2,Slf4j,Tomcat Juli,TL;DR 如果在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.
- 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中)
<?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>
并使用其他JVM参数运行Tomcat:
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dlog4j.configurationFile=file:log4j2.xml"
因此,每个Tomcat、JULI、apachecommons和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.logging.logging.jul.ApiLogger”,“threadId”:1,“source”:{“class”:“org.apache.juli.logging.impl.Jdk14Logger”,“方法”:“log”,“文件”:“Jdk14Logger.java”,“line”:87},“threadPriority”:5,“instant”:{“epochSecond”:1562919500,“nanoOfSecond”:701000000}
如果我删除KeyValuePair
,一切正常
这里有什么问题吗?我也遇到了同样的问题。它与log4j-2.12.0有某种联系,在2.11.2中是可以的。这是问题的答案吗?请删除这里的注释,并在原始问题的下方重写它实际上回答了问题。看起来他们有一个问题。
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dlog4j.configurationFile=file:log4j2.xml"