2013-06-04 17 views
6

Sto utilizzando log4j2 e non so come posso filtrare in base al nome della classe. Ho provato con RegexFilter ma filtra solo il messaggio di testo. Nel vecchio log4j bastava il tag 'filter'Filtra per nome classe in log4j2

<filter class="aaaa.bbbb.cccc.ClassName"> 

Qualcuno sa come fare ora?

Grazie in anticipo!

Aggiornamento:

Ok, l'ho fatto! Ho bisogno di definire un registratore e impostare il nome della classe di attributo 'name':

<loggers> 
    <logger name="aaaa.bbbb.cccc.ClassName" additivity="false" level="info"> 
     <appender-ref ref="RollingFile" /> 
    </logger> 
    <root level="error"> 
     <appender-ref ref="RollingFile" /> 
    </root> 
</loggers> 

risposta

2

questo funziona automaticamente in Log4j se si segue la convenzione di denominazione per logger. Nel codice, dichiarare logger con il loro nome classe:

Logger logger = LogManager.getLogger(MyClass.class); 

Il registratore viene assegnato automaticamente il nome fully.qualified.class.name.of.MyClass. Ora, nella configurazione è possibile utilizzare questo nome completo (o il nome del pacchetto o la prima parte del pacchetto) per fare il filtraggio e il routing:

Filtering

L'esempio seguente mostra come filtrare registro eventi basati sul pacchetto della classe che esegue la registrazione: tutti gli eventi di registro di livello DEBUG e TRACE per classi nel pacchetto com.other.company verranno ignorati e per le classi nel pacchetto com.another.project verrà inclusa solo la registrazione ERROR e FATAL.

<Configuration status="warn"> 
    <Appenders> 
    <File name="MyFile" fileName="logs/my.log"> 
     <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" /> 
    </File> 
    </Appenders> 
    <Loggers> 

    <!-- drops all DEBUG and TRACE logging done by any class in this package --> 
    <Logger name="com.other.company" level="INFO" /> 

    <!-- log only ERROR and FATAL logging by classes in this package --> 
    <Logger name="com.another.project" level="ERROR" /> 

    <!-- by default, all log events are written to MyFile --> 
    <Root level="trace"> 
     <AppenderRef ref="MyFile"/> 
    </Root> 
    </Loggers> 
</Configuration> 

Routing

L'esempio seguente mostra come gli eventi per separare i file in base il pacchetto della classe a fare la registrazione di log di registro percorso: tutta la registrazione per classi nel pacchetto com.other.company non saranno scritti my.log solo per other.log.

<Configuration status="warn"> 
    <Appenders> 
    <File name="MyFile" fileName="logs/my.log"> 
     <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" /> 
    </File> 
    <File name="OtherFile" fileName="logs/other.log"> 
     <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" /> 
    </File> 
    </Appenders> 
    <Loggers> 
    <!-- all logging from this package and subpackages goes to OtherFile --> 
    <!-- Note: set additivity=false or logging will also go to the root logger --> 
    <Logger name="com.other.company" additivity="false"> 
     <AppenderRef ref="OtherFile"/> 
    </Logger> 
    <Root level="trace"> 
     <AppenderRef ref="MyFile"/> 
    </Root> 
    </Loggers> 
</Configuration>