2013-06-04 12 views
6

Używam log4j2 i nie wiem, jak mogę filtrować według nazwy klasy. Próbowałem z RegexFilter, ale filtruje tylko wiadomość tekstową. W starym log4j wystarczył z filtrem 'Filtruj według nazwy klasy w log4j2

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

Ktoś wie jak teraz?

Z góry dziękuję!

Aktualizacja:

Ok, zrobiłem to! Muszę zdefiniować rejestrator i ustawić nazwę klasy w atrybucie „nazwa”:

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

Odpowiedz

2

ta działa automatycznie w Log4j jeśli zgodnie z konwencją nazewnictwa dla drwali. W kodzie, zadeklarować rejestratory z nazwą klasy:

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

Rejestrator automatycznie przypisywana jest nazwa fully.qualified.class.name.of.MyClass. Teraz, w konfiguracji można użyć tego pełną nazwę (lub nazwę pakietu lub pierwszą część pakietu), aby wykonać filtrowanie i routingu:

Filtering

Poniższy przykład pokazuje jak filtrować dziennik zdarzenia oparte na pakiecie klasy wykonującej rejestrowanie: wszystkie zdarzenia dziennika poziomu DEBUG i TRACE według klas w pakiecie com.other.company zostaną zignorowane, a dla klas w pakiecie com.another.project uwzględnione zostaną tylko rejestrowanie ERROR i 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

Poniższy przykład pokazuje, w jaki sposób wydarzenia aby rozdzielić plików opartych na opakowaniu klasy robi rejestrowanie Log trasa: Wszystkie rejestrowanie według klas w pakiecie com.other.company nie zostaną zapisane my.log tylko przez 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> 
Powiązane problemy