2016-06-07 14 views
0

ich log4j2 Protokolle mit einem bestimmten Muster zu schreiben versuchen:log4j2 wesentliche Argumente werden nicht von dem Namen aufgenommen

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="warn"> 
    <Appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout charset="UTF-8" 
       pattern="%d{HH:mm:ss.SSS} ${main:-jobId} %-5.-5level %-25.-25c{1}%-25.-25method(%5.5line) - %msg%n" /> 
     </Console> 
     <RollingFile name="LogFile" fileName="${sys:logFile}" 
      filePattern="${sys:logFile}-%d{MM-dd-yyyy}-%i.log.gz"> 
      <PatternLayout charset="UTF-8" 
       pattern="%d{yyy-MM-dd HH:mm:ss.SSS} ${main:-jobId} [%-30.-30t] %-5.-5level %-25.-25c{1}%-25.-25method(%5.5line) - %msg%n" /> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="100 MB" /> 
      </Policies> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Root level="trace"> 
      <AppenderRef ref="LogFile" level="debug" /> 
      <AppenderRef ref="Console" level="info" /> 
     </Root> 
    </Loggers> 
</Configuration> 

ich vorbei ein paar Argumente -o abc -d def -jobId 1234 -DlogFile /usr/lib/logpath.log Dies funktioniert für Systemparameter, aber das Protokoll druckt als:

15:33:34.889 jobId INFO Test   main      ( 74) - -b 
15:33:34.890 jobId INFO Test   main      ( 74) - -o 
15:33:34.890 jobId INFO Test   main      ( 74) - account 
15:33:34.890 jobId INFO Test   main      ( 74) - document 
15:33:34.890 jobId INFO Test   main      ( 74) - -d 
15:33:34.891 jobId INFO Test   main      ( 74) - rest 
15:33:34.891 jobId INFO Test   main      ( 74) - -l 
15:33:34.891 jobId INFO Test   main      ( 74) - 100 
15:33:34.891 jobId INFO Test   main      ( 74) - -skipmd 
15:33:34.891 jobId INFO Test   main      ( 74) - -db 
15:33:34.891 jobId INFO Test   main      ( 74) - -jobId 
15:33:34.891 jobId INFO Test   main      ( 74) - 1234 

Der Code in Haupt beginnt mit:

public static void main(String[] args) throws Exception 
    { 
     MainMapLookup.setMainArguments(args); 
     for (String s : args) 
      logger.info(s); 
... 
} 

Ich habe versucht, das Argument basierend auf dem Index zu verwenden, und es funktioniert. Die Suche nach Hauptargumenten scheint jedoch nicht zu funktionieren. Fehle ich hier etwas?

Vielleicht eine off-topic Frage, was ist der legitime Anwendungsfall der Handhabung von Systemvariablen über die Hauptargumente bei der Protokollierung?

Antwort

0

Der Grund dafür funktioniert nicht, weil es eine Kollision im Format zwischen MainMapLookup nach Name und dem StrSubstitutor-Standardwert Delimiter gibt.

$ https://issues.apache.org/jira/browse/LOG4J2-1013

: {main: -jobId} wird als Eigentum Haupt OR jobId

Dies ist ein bekannter Fehler hier berichtet analysiert