Отфильтровывать сообщения log4j от сторонних фреймворков? - PullRequest
31 голосов
/ 25 августа 2010

Как фильтровать сообщения журнала от внешних сторонних платформ?Я использую Hibernate и Spring Framework, и я хотел бы подавить журналы, чтобы отображались только мои журналы log4j.

Ответы [ 4 ]

34 голосов
/ 25 августа 2010

В моем файле log4j.properties я установил уровень ведения журнала корневого регистратора на ERROR.Затем для пакетов, которые я специально хочу регистрировать, например, код моего приложения, я установил уровень ведения журнала на INFO или DEBUG.

log4j.rootLogger=ERROR, stdout
log4j.logger.com.initech.tps=DEBUG
log4j.logger.org.hibernate.SQL=INFO

Я вижу сотрудников, которые устанавливают низкое значение для ведения журнала root, а затем заканчивают перечислять все, что они не хотят видеть, что просто кажется мне отсталым.Я предпочел бы перечислить то, что я хочу регистрировать, а не все, что я не хочу регистрировать.

Кстати, отключение выхода из системы для стороннего компонента кажется мне плохой идеей.Например, Spring относительно шумный и использует WARN для вещей, о которых мне действительно не нужно знать, но если он регистрирует запись ERROR для чего-то, что я хочу увидеть.

14 голосов
/ 25 августа 2010

Вы можете сделать это, изменив уровень логгера в файле log4j.properties/log4j.xml.

Вам нужно установить логгер <level value="off"/>, если вы хотите отфильтровать журналы из пакета, но сохранить конфигурацию регистратора для дальнейшего использования.Вы также можете установить его на высший уровень для входа только в случае ошибки или фатальной проблемы.

Следующие записи должны быть добавлены в log4j.xml, чтобы отключить ведение журнала в пакетах hibernate и springframework:

<logger name="org.springframework">
    <level value="off"/>
</logger>
<logger name="org.hibernate">
    <level value="off"/>
</logger>
3 голосов
/ 25 августа 2010

В log4j.properties вы можете определить отдельные уровни для каждого регистратора:

log4j.logger.<name>=FATAL

В log4j.xml синтаксис:

<logger name="<name>">
  <level value="fatal"/> 
</logger>

часто является полным именем класса. Возможно, вы захотите использовать WARN или ERROR вместо FATAL

2 голосов
/ 25 августа 2010

Только не добавляйте эти пакеты в свои log4j.properties.Например, вы должны иметь это для Spring в вашем файле свойств.Уберите его, если у вас есть какие-либо записи, как показано ниже (все, что начинается с org.springframework).То же самое необходимо сделать для спящего режима.

#Logs the SQL from Spring
log4j.logger.org.springframework.jdbc.core.JdbcTemplate=ERROR
#Logs the SQL parameters from Spring
log4j.logger.org.springframework.jdbc.core.StatementCreatorUtils=ERROR

Также, как уже упоминалось, вы также должны установить следующее.Я забыл упомянуть об этом.

log4j.rootLogger=FATAL  
or   
log4j.rootLogger=ERROR  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...