2014-05-23 48 views
6

Im usando log4j2 con i seguenti dipendenze:Log4j2 AsyncLogger con appender di laminazione file non mostrando il numero di riga del file

contenuti
<!-- 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:

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

risultare che tutto è andato bene, tranne il registro doesn 't show Numero linea di logger lanciato (% L nel pattern).

Ho cercato su Google e ho scoperto che per il logger asincrono e l'appender di file rotanti, non c'è nessuno menzionato usando% L, quindi come posso ottenerlo allora? O non supporta% L?

Edit: Ho provato aggiunto includeLocation = "true", ma ancora gli stessi risultati

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

Grazie

risposta

9

In primo luogo, rimuovere l'appender asincrona, e puntare l'appender-ref di AsyncLogger al ProcessorLoggingFile direttamente. In secondo luogo, è necessario aggiungere includeLocation = "true" su AsyncLogger.

Avere un appender asincrono oltre a un logger asincrono non aiuta e in questo caso potrebbe essere ciò che impedisce il corretto funzionamento di includeLocation.

+0

Grazie !!! Funziona .. Ma come mai avere un appender asincrono è un no no oltre al logger asyn? – Lynx777

+2

Se la tua app si collega ad un logger asincrono, in pratica si limiterà a mettere gli eventi di log su una coda (il disturbatore LMAX). Un thread separato eliminerà gli eventi dalla coda e li invierà all'appender. Se l'appender è asincrono, l'evento viene nuovamente inserito in una coda. Infine, il thread dell'appender asincrono estrarrà l'evento da quella coda e scriverà sul file. Quindi uno di questi non è necessario. Gli async logger sono molto più veloci quindi ti consiglio di rimuovere l'appender async. Inoltre, se tenete entrambi avete bisogno di inclusione per entrambi (non so se funzionerebbe, non testato ...) –