2016-04-27 15 views
0

Ich habe eine Web-App mit jee6 und log4j 2. Ich möchte ein benutzerdefiniertes Protokoll für meine Batch-Prozess haben, legte ich eine benutzerdefinierte Ebene mit den Protokollen des Stapels füllen.Log4j 2 benutzerdefinierte Ebene auf Jboss 6.4

Aber ich kann nichts protokollieren, beim Start des Servers kann ich die Protokolldatei server.log erstellen, aber ist leer, und die error_batch.log hat alle Protokolle: .info und meine benutzerdefinierte Ebene, die ich habe nicht Fehler im Server, was ist die richtige Konfiguration für meinen Fall?

private static final Logger logger = LogManager.getLogger(test.class); 

-

logger.info("Starting on the Server"); 
logger.log(Level.forName("ERROR_BATCH", 450), "Example Error in Batch"); 

-

<?xml version="1.0" encoding="UTF-8"?> 

<Configuration status="WARN"> 

    <CustomLevels> 
     <CustomLevel name="ERROR_BATCH" intLevel="450" /> 
    </CustomLevels> 

    <Appenders> 

     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 
     </Console> 

     <RollingFile name="logBatch" fileName="C:\\Workarea\\Error\\error_batch.log" 
        filePattern="C:\\Workarea\\Error\\error_batch-%d{dd-MM-yyyy}-%i.log" 
        append="true"> 
      <PatternLayout> 
       <Pattern>%d %p %c [%t] %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="1 MB"/> 
      </Policies> 
      <DefaultRolloverStrategy max="5"/> 
     </RollingFile> 

     <RollingFile name="logServer" fileName="C:\\Workarea\\Error\\server.log" 
        filePattern="C:\\Workarea\\Error\\server-%d{dd-MM-yyyy}-%i.log" 
        append="true"> 
      <PatternLayout> 
       <Pattern>%d %p %c [%t] %m%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="1 MB"/> 
      </Policies> 
      <DefaultRolloverStrategy max="5"/> 
     </RollingFile> 

    </Appenders> 

    <Loggers> 
     <Root level="error"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="logServer" /> 
     </Root> 
     <Root level="info"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="logServer" /> 
     </Root> 
     <Root level="debug"> 
      <AppenderRef ref="Console" /> 
      <AppenderRef ref="logServer" /> 
     </Root> 
     <Root level="trace"> 
      <AppenderRef ref="logBatch" level="ERROR_BATCH" /> 
     </Root> 
    </Loggers> 

</Configuration> 

Antwort

1

Dies ist ein Duplikat How to log in different file? log4j2 sein sieht, was wiederum ein Duplikat einer zuvor gestellte Frage ist.

Ihr grundlegendes Problem ist, dass Sie den Root-Logger nur einmal konfigurieren können, nicht 4-mal wie Sie es tun. Ich schätze, der mit level = "error" ist "winning", aber ich bin mir nicht wirklich sicher.

Informationen zum Abrufen von Ereignissen in bestimmten Protokolldateien finden Sie in der Antwort auf die Frage, die Sie zuvor gestellt haben.

0
logger.log(Level.forName("ERROR_BATCH", 450), "Example Error in Batch"); 

und

<CustomLevels> 
    <CustomLevel name="ERROR_BATCH" intLevel="450" /> 
</CustomLevels> 

sind Duplikate. Sie definieren Ihre benutzerdefinierte Ebene zweimal und die zweite (im Code) muss die erste (in der Konfigurationsdatei) überschreiben.

Entfernen Sie die in Ihrem Code. Es sollte funktionieren.