Не удается захватить режим отладки с помощью Log4j - PullRequest
0 голосов
/ 10 апреля 2019

У меня странное поведение. Невозможно записать режим DEBUG для определенного регистратора.

Вот мой файл свойств

logfile=C:/Softwares/logFiles

log4j.rootLogger=ERROR, generalDebug, generalError

log4j.appender.generalDebug=org.apache.log4j.RollingFileAppender
log4j.appender.generalDebug.File=${logfile}/debug.log
log4j.appender.generalDebug.MaxFileSize=10MB
log4j.appender.generalDebug.MaxBackupIndex=10
log4j.appender.generalDebug.layout=org.apache.log4j.PatternLayout
log4j.appender.generalDebug.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.generalDebug.Threshold=DEBUG

log4j.appender.generalError=org.apache.log4j.RollingFileAppender
log4j.appender.generalError.File=${logfile}/error.log
log4j.appender.generalError.MaxFileSize=10MB
log4j.appender.generalError.MaxBackupIndex=10
log4j.appender.generalError.layout=org.apache.log4j.PatternLayout
log4j.appender.generalError.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.generalError.Threshold=ERROR

#######################################################################

log4j.logger.JavaTest=ERROR, HipDebug, HipError
log4j.additivity.JavaTest=true

log4j.appender.HipDebug=org.apache.log4j.RollingFileAppender
log4j.appender.HipDebug.File=${logfile}/HipDebug.log
log4j.appender.HipDebug.MaxFileSize=10MB
log4j.appender.HipDebug.MaxBackupIndex=10
log4j.appender.HipDebug.layout=org.apache.log4j.PatternLayout
log4j.appender.HipDebug.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.HipDebug.Threshold=DEBUG

log4j.appender.HipError=org.apache.log4j.RollingFileAppender
log4j.appender.HipError.File=${logfile}/HipError.log
log4j.appender.HipError.MaxFileSize=10MB
log4j.appender.HipError.MaxBackupIndex=10
log4j.appender.HipError.layout=org.apache.log4j.PatternLayout
log4j.appender.HipError.layout.ConversionPattern=[%-5p] %d{ISO8601}|%r %C|%L|%x - %m%n
log4j.appender.HipError.Threshold=ERROR

И в имени пакета Project JavaTest, где я использую приведенный ниже фрагмент кода чтобы получить журнал.

PropertyConfigurator.configure("C:\\Softwares\\ConfigFiles\\log4j.properties");         
   Logger logger = Logger.getLogger(TestClass.class);
   logger.log(TestClass.class.getCanonicalName(), Level.DEBUG, "I'm Writing for DEBUG Mode", null);

Хочу, когда запущен режим DEBUG, он должен записываться только в файл HipDebug.log. Но если я использую режим ERROR, он не записывается ни в один файл. (Следует писать только в HipError.log файле)

Во-вторых, когда я использую ERROR, он записывает все четыре файла. (debug.error, error.log, HipDebug.log, HipError.log). Почему это так?

Когда и как я могу писать только в файлы rootLogger? (error.log and debug.log files only) * * тысяча двадцать-одна

Может кто-нибудь подсказать, пожалуйста?

Спасибо

1 Ответ

0 голосов
/ 19 мая 2019

Когда я пытаюсь воссоздать то, что вы делаете, я вижу, что журналы не записываются, но это происходит при использовании уровня DEBUG для генерации событий журнала, а не ERROR.Я изменил приведенный ниже вопрос, чтобы отразить это.

... если я использую режим [DEBUG], он не записывается ни в один файл.

Проблема здесьв том, что ваши регистраторы установлены в режим ERROR, что означает, что они будут принимать события только с уровнем ERROR или FATAL.Регистратор и приложение должны принять событие до того, как сообщение будет зарегистрировано.

Во-вторых, когда я использую ОШИБКУ, он записывает все четыре файла.(debug.error, error.log, HipDebug.log, HipError.log). Почему это так?

У вас есть log4j.additivity.JavaTest=true, что означает, что любое событие, принятое регистратором JavaTest, будетотправляется и своим, и дополнительным приложениям своих родительских регистраторов (если только один из них не разрывает цепочку, устанавливая ложное значение аддитивности)

Кроме того, поскольку у вас есть log4j.appender.generalDebug.Threshold=DEBUG и log4j.appender.HipDebug.Threshold=DEBUG, эти добавщики будут принимать события уровнейDEBUG, INFO, WARN, ERROR и FATAL.

Когда и как я могу писать только в файлы rootLogger?(только файлы error.log и debug.log)

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

Одна заключительная мысль - если это вообще возможно, вы должны перейти на log4j2 , поскольку он предлагает множество улучшений по сравнению с log4j1 и log4j1 достиг конца срока службы.

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