2017-09-26 2 views
0

J'ai l'appender de console suivant;Connexion Log4j2 vide ThreadContext

<Console name="STDOUT"> 
    <PatternLayout pattern="%highlight{%d [%t] %notEmpty{[%marker] }%-5level: %msg %X%n%throwable}"/> 
    <ThresholdFilter level="trace"/> 
</Console> 

Le problème est que le modèle que je l'ai utilisé sorties ici un ThreadContext vide ({}). Je ne souhaite pas utiliser de noms de clé spécifiques (par exemple %X{username}) car le système est assez étendu et l'ensemble de clés varie. Exemple de sortie:

2017-09-26 10: 39: 55396 [principal] INFO: Démarrage du HTTP interne client {}

Répondre

0

D'accord, je résolu mon problème en utilisant la ScriptPatternSelector . Le script ci-dessous vérifie si le MDC logEvent n'est pas vide et modifie le modèle si la valeur est true;

<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>