How do I filter log messages from external third party frameworks? I am using Hibernate and Spring framework and I would like to suppress the logs so that only my log4j logs appears.
В моем файле log4j.properties я установил уровень ведения журнала корневого регистратора на ERROR. Затем для пакетов, которые я специально хочу регистрировать, например код моего приложения, я устанавливаю уровень ведения журнала INFO или DEBUG.
log4j.rootLogger=ERROR, stdout
log4j.logger.com.initech.tps=DEBUG
log4j.logger.org.hibernate.SQL=INFO
Я вижу коллег, которые устанавливают низкий уровень корневого журнала, а затем в конечном итоге перечисляют все, что они не хотят видеть, что мне кажется отсталым. Я бы предпочел перечислить то, что я хочу регистрировать, чем все, что я не хочу регистрировать.
Кстати, полное отключение входа в систему для стороннего компонента кажется мне плохой идеей. Например, Spring относительно шумный и использует WARN для вещей, о которых мне действительно не нужно знать, но если он регистрирует запись ERROR для чего-то, что я хочу видеть.
Вы можете сделать это, изменив уровень ведения журнала в файле log4j.properties/log4j.xml.
Вам необходимо установить
регистратора, если вы хотите фильтровать журналы из пакета, но сохранить конфигурацию регистратора для дальнейшего использования.
Вы также можете установить его на самый высокий уровень, чтобы регистрировать только в случае ошибки или фатальной проблемы.
Чтобы отключить ведение журнала из пакетов hibernate и springframework, необходимо добавить в log4j.xml следующие записи:
<logger name="org.springframework">
<level value="off"/>
</logger>
<logger name="org.hibernate">
<level value="off"/>
</logger>
Просто не добавляйте эти пакеты в свои 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
В log4j.properties вы можете определить отдельные уровни для каждого регистратора:
log4j.logger.<name>=FATAL
В log4j.xml используется следующий синтаксис
<logger name="<name>">
<level value="fatal"/>
</logger>
<имя> часто является полным именем класса. Вы можете использовать WARN или ERROR вместо FATAL