Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat 为什么log4j2jsonlayout&x2B;KeyValuePair打印空日志事件消息_Tomcat_Logging_Log4j2_Slf4j_Tomcat Juli - Fatal编程技术网

Tomcat 为什么log4j2jsonlayout&x2B;KeyValuePair打印空日志事件消息

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.

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.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>
并使用其他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"