2016-06-17 2 views
0
<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
<Properties> 
     <Property name="log-path">logs</Property> 
    </Properties> 
    <Appenders> 
    <Console name="console-log" target="SYSTEM_OUT"> 
      <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/> 
    </Console> 
    <File name="trace-log" fileName="${log-path}/trace.log" immediateFlush="true" append="true"> 
      <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
<File name="error-log" fileName="${log-path}/error.log" immediateFlush="true" append="true"> 
      <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
<File name="debug-log" fileName="${log-path}/debug.log" immediateFlush="true" append="true"> 
      <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
<File name="info-log" fileName="${log-path}/info.log" immediateFlush="true" append="true"> 
      <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
     </File> 
    </Appenders> 
    <Loggers> 

    <Root level="error"> 
     <AppenderRef ref="error-log"/> 
<AppenderRef ref="console-log"/> 
    </Root> 
<Root level="info"> 
     <appender-ref ref="info-log"/> 
<AppenderRef ref="console-log"/> 
    </Root> 
<Root level="debug"> 
     <AppenderRef ref="debug-log"/> 
<AppenderRef ref="console-log"/> 
    </Root> 
<Root level="trace"> 
     <AppenderRef ref="trace-log"/> 
<AppenderRef ref="console-log"/> 
    </Root> 

    </Loggers> 
</Configuration> 

Mein Code, der oben geschrieben wird, hängt alles nur an das Ablaufverfolgungsprotokoll an. Tatsächlich wird Root, der zuletzt aufgerufen wird, nur alle Protokollinformationen gespeichert. Wie korrigiere ich das? Ich möchte, dass alle Protokolldateien so intuitiv arbeiten.Warum hängt dieser Code nur im Traceprotokoll und nicht in anderen an? Wie korrigiere ich das?

Antwort

1

Sie haben ein paar Probleme hier:

  1. Sie nur einen einzigen Wurzel-Logger haben kann. Du hast mehrere. Log4j wird nur einen von ihnen verwenden.
  2. Es scheint, dass Sie nur eine bestimmte Ebene möchten, um zu jeder Datei zu gehen. Das Level-Attribut sagt "Let Events dieser Ebene ODER GREATER" wird protokolliert. So erlaubt ein Root-Logger mit level = "error" Ereignisse mit Level-Fehler oder fatal. Ein Root-Logger bei info erlaubt Ereignisse auf Level-Info, Fehler oder fatal.

Sie können dies versuchen:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Properties> 
    <Property name="log-path">logs</Property> 
    </Properties> 
    <Appenders> 
    <Console name="console-log" target="SYSTEM_OUT"> 
     <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/> 
    </Console> 
    <File name="trace-log" fileName="${log-path}/trace.log" immediateFlush="true" append="true"> 
     <ThresholdFilter level="debug" onMatch="DENY" onMismatch="ACCEPT"/> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 
    <File name="error-log" fileName="${log-path}/error.log" immediateFlush="true" append="true"> 
     <Filters> 
      <ThresholdFilter level="error" onMatch="NEUTRAL" onMismatch="DENY"/> 
      <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="ACCEPT"/> 
     </Filters> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 
    <File name="debug-log" fileName="${log-path}/debug.log" immediateFlush="true" append="true"> 
     <Filters> 
      <ThresholdFilter level="debug" onMatch="NEUTRAL" onMismatch="DENY"/> 
      <ThresholdFilter level="info" onMatch="DENY" onMismatch="ACCEPT"/> 
     </Filters>   <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 
    <File name="info-log" fileName="${log-path}/info.log" immediateFlush="true" append="true"> 
     <Filters> 
      <ThresholdFilter level="info" onMatch="NEUTRAL" onMismatch="DENY"/> 
      <ThresholdFilter level="warn" onMatch="DENY" onMismatch="ACCEPT"/> 
     </Filters> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 
    </Appenders> 
    <Loggers> 
    <Root level="trace"> 
     <AppenderRef ref="error-log"/> 
     <AppenderRef ref="info-log"/> 
     <AppenderRef ref="debug-log"/> 
     <AppenderRef ref="trace-log/> 
     <AppenderRef ref="console-log"/> 
    </Root> 
    </Loggers> 
</Configuration> 
+0

Nizza ausführliches Beispiel! –

Verwandte Themen