2014-01-31 11 views
0

У меня есть следующий log4j.properties файл:Отключить ведение журнала log4j утешать

# Direct log messages to a log file 
log4j.appender.fileerror=org.apache.log4j.RollingFileAppender 
log4j.appender.fileerror.File=C\:\\logs_eba\\loging-error.log 
log4j.appender.fileerror.MaxFileSize=20MB 
log4j.appender.fileerror.MaxBackupIndex=1 
log4j.appender.fileerror.layout=org.apache.log4j.PatternLayout 
log4j.appender.fileerror.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 
log4j.appender.fileerror.threshold = WARN 

# Direct log messages to stdout 
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
#log4j.appender.stdout.Target=System.out 
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
#log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

# Root logger option 
log4j.rootLogger = WARN, fileerror 

Но мое приложение продолжает направлять журналы на мою консоль, он даже показывает журналы на информационном уровне, даже если я определил WARN порога.

Для справки, это, как я получаю мои объекты Logging:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

    private static final Logger log = LoggerFactory.getLogger(MyClass.class.getSimpleName()); 
log.warn("My log message"); 

Может ли это быть связано с моим использованием SLF4J?

PS. Я использую Spring + Hibernate в качестве моей архитектуры, а их журналы также перенаправляются на консоль.

+0

Вы ничего не получаете в своем файле журнала? просто все в единственной консоли – Keerthivasan

+0

Нечетная вещь, файл создан, но ничего не записывается – MichelReap

ответ

1

Log4J по умолчанию ищет log4j.properties файл в classpath и рассмотрит тот, который был найден первым. Поэтому, если ваше приложение зависит от библиотеки, которая сама зависит от log4j, а также предоставляет log4j.properties, то есть шанс, что она будет выбрана.

Так что я бы порекомендовал вам указать пользовательское местоположение для свойств с помощью

java -Dlog4j.configuration=customName 

Или использовать -Dlog4j.debug найти полезную информацию о конфигурации log4j.

+0

Проблема в том, что я не могу работать с параметрами на моем рабочем сервере. Но если я запустил приложение без моего log4j.properties, я получаю сообщение об ошибке, сообщающее мне, что его нет. – MichelReap

0

Как упоминалось в ответе Нарендры, это может быть связано с тем, что одна из ваших зависимых библиотек имеет собственные log4j.properties, которые подхватываются приложением (ваши log4j.properties игнорируются). В идеале это не должно происходить, так как большинство библиотек с открытым исходным кодом не содержат файл log4j.properties. Они ожидают, что вызывающий модуль предоставит один.

Узнайте, из какого модуля этот файл свойств. Если это внутренний проект, который вы контролируете, вы должны удалить из него log4j.properties. Если это внешняя банка, попробуйте переопределить файл log4j.properties. Как вы это сделаете, будет зависеть от того, как вы развертываете свои банки вместе, например. используя maven, копию файла и т. д.

PS: IMHO, ни один стандартный проект с открытым исходным кодом не должен содержать свой собственный файл log4j.properties по этой точной причине. Если вы используете такую ​​библиотеку, возможно, она не очень зрелая, и вы можете захотеть взглянуть на альтернативы.

Смежные вопросы