2013-06-04 2 views
6

Я использую log4j2, и я не знаю, как я могу фильтровать по имени класса. Я попытался с RegexFilter, но он только фильтрует текстовое сообщение. В старых log4j было достаточно с тегом «фильтр»Фильтровать по имени класса в log4j2

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

Кто-нибудь знает, как это сделать сейчас?

Спасибо заранее!

Обновление:

Хорошо, я сделал это! Мне нужно, чтобы определить регистратора и установить имя класса в «имя» атрибута:

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

ответ

2

Это работает автоматически в Log4j, если вы будете следовать соглашению об именах для лесорубов. В своем коде, объявить лесорубов с их именем класса:

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

Регистратор автоматически присваивается имя fully.qualified.class.name.of.MyClass. Теперь в вашей конфигурации вы можете использовать это полное имя (или имя пакета или первую часть пакета), чтобы сделать фильтрацию и маршрутизации:

Фильтрация

Ниже пример показывает, как фильтровать журнал события, основанные на пакете класса, выполняющего ведение журнала: все события журнала уровня DEBUG и TRACE по классам в пакете com.other.company будут проигнорированы, а для классов в пакете com.another.project будут включены только протоколы ERROR и 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

Ниже пример показывает, как маршрутизировать события для разделения файлов на основе пакета класса, выполняющего ведение журнала журнала журнал: все протоколирование по классам в пакете com.other.company не будет записана my.log только 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> 
Смежные вопросы