Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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

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
Java Log4j2记录空线程上下文_Java_Logging_Log4j_Log4j2 - Fatal编程技术网

Java Log4j2记录空线程上下文

Java Log4j2记录空线程上下文,java,logging,log4j,log4j2,Java,Logging,Log4j,Log4j2,我有以下控制台附加器 <Console name="STDOUT"> <PatternLayout pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/> <ThresholdFilter level="trace"/> </Console> 问题是我在这里使用的模式输出一个空的ThreadContext{}。我不想使

我有以下控制台附加器

<Console name="STDOUT">
     <PatternLayout pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/>
     <ThresholdFilter level="trace"/>
</Console>
问题是我在这里使用的模式输出一个空的ThreadContext{}。我不想使用特定的密钥名称,例如%X{username},因为系统非常广泛,密钥集也不同。示例输出:

2017-09-26 10:39:55396[main]信息:启动内部HTTP 客户端{}


好的,我通过使用ScriptPatternSelector解决了我的问题。下面的脚本检查logEvent的MDC是否为空,如果为真,则更改模式

<Console name="STDOUT">
      <PatternLayout>
         <ScriptPatternSelector defaultPattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg%n%throwable}">
               <Script name="MDCSelector" language="javascript"><![CDATA[
                    result = null;
                    if (!logEvent.getContextData().size() == 0) {
                        result = "WithMDC";
                    } else {
                        result = null;
                    }
                    result;
               ]]>
               </Script>
           <PatternMatch key="WithMDC" pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/>
         </ScriptPatternSelector>
     </PatternLayout>
    <ThresholdFilter level="trace"/>
</Console>

比使用ScriptPatternSelector要求log4j用MDC的空字符串替换{}要短一点。为此,请在log4j.xml或log4j2.xml中将%X替换为%equals{%X}{{{}}{}