2014-05-23 5 views
6

Im mit folgenden Abhängigkeiten mit log4j2:Log4j2 AsyncLogger mit Roll Datei appender nicht Datei Zeilennummer zeigt

<!-- LOG4J2 --> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-api</artifactId> 
     <version>2.0-rc1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.logging.log4j</groupId> 
     <artifactId>log4j-core</artifactId> 
     <version>2.0-rc1</version> 
    </dependency> 
    <dependency> 
     <groupId>com.lmax</groupId> 
     <artifactId>disruptor</artifactId> 
     <version>3.0.1</version> 
    </dependency> 

Log4j2.xml Inhalt:

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

<Appenders> 
    <Console name="CONSOLE" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" /> 
    </Console> 

    <!-- Generate rolling log for router with per hour interval policy --> 
    <RollingFile name="ProcessorRollingFile" fileName="D:/ocsprocessor.log" 
     filePattern="D:/ocsprocessor.log.%d{MM-dd-yyyy}-%i.log"> 
     <PatternLayout> 
     <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern> 
    </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" /> 
     </Policies> 
     <DefaultRolloverStrategy max="24" /> 
    </RollingFile> 



    <!-- Register Async appender --> 
    <Async name="AsyncRollingFile"> 
     <AppenderRef ref="ProcessorRollingFile" /> 
    </Async> 
</Appenders> 

<Loggers> 
    <AsyncLogger name="com.tritronik.logger.log4j2" level="error" 
     additivity="false"> 
     <AppenderRef ref="AsyncRollingFile" /> 
    </AsyncLogger> 


</Loggers> 
</Configuration> 

herausstellen, dass alles ging außer dem Protokoll feinen doesn zeige nicht die Nummer des geworfenen Loggers an (das% L im Muster).

Ich googelte und fand heraus, dass für Async Logger und Rolling File Appender niemand mit% L erwähnt wird, also wie kann ich es dann erreichen? Oder unterstützt es% L nicht?

Edit: Ich habe versucht, hinzugefügt includeLocation = "true", aber immer noch dieselben Ergebnisse

2014-05-23 11:42:40,368 [threadPoolTaskExecutor-5] ERROR (AsyncLogger:) - THIS IS TEST MESSAGE FOR LOGGING TEST PURPOSE 

Dank

Antwort

9

Zuerst das Async appender, entfernen und zeigen die appender-ref von der AsyncLogger direkt zur ProcessorLoggingFile. Zweitens müssen Sie includeLocation = "true" auf dem AsyncLogger hinzufügen.

Das Vorhandensein eines asynchronen Appenders zusätzlich zu einem asynchronen Protokollierer hilft nicht und in diesem Fall könnte das verhindern, dass includeLocation ordnungsgemäß funktioniert.

+0

Danke !!! Es funktioniert .. Aber ähm, wie ist async appender ein Nein Nein neben asyn Logger? – Lynx777

+2

Wenn sich Ihre Anwendung bei einem asynchronen Protokollierer anmeldet, werden im Wesentlichen nur Protokollereignisse in eine Warteschlange (den LMAX-Disruptor) gestellt. Ein separater Thread nimmt die Ereignisse aus der Warteschlange und sendet sie an den Appender. Wenn der Appender asynchron ist, wird das Ereignis erneut in eine Warteschlange eingereiht. Schließlich nimmt der Thread des asynchronen Appenders das Ereignis aus dieser Warteschlange und schreibt in die Datei. Also ist einer von ihnen unnötig. AsyncLoggers sind viel schneller, also würde ich empfehlen, den async Appender zu entfernen. Wenn Sie beides behalten, brauchen Sie auch includeLocation für beide (nicht sicher, ob das funktionieren würde, nicht getestet ...) –

Verwandte Themen