log4j не регистрирует сообщения от классов, отличных от main - PullRequest
3 голосов
/ 17 июля 2011

Я пытаюсь понять, как заставить log4j работать в моем проекте. У меня есть 2 класса, один с именем testWithMain.TestSectionSplit, а другой с именем search.SectionScanner. В TestSectionSplit я звоню

Logger log = Logger.getLogger(TestSectionSplit.class);
PropertyConfigurator.configure(FilePaths.LOGGER_CONFIG);

где FilePaths.LOGGER_CONFIG указывает на файл конфигурации. В классе SectionScanner я просто создаю статическое поле

private Logger logger = Logger.getLogger(SectionScanner.class);

Файл конфигурации выглядит как

# =========================
# appenders configuration
# =========================

# console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.threshold=ALL
log4j.appender.console.layout=org.apache.log4j.PatternLayout


# =========================
# loggers configuration
# =========================

log4j.rootLogger=ALL, console

log4j.logger.search.SectionScanner=ALL, console

Проблема в том, что при регистрации сообщений wirtten в TestSectionSplit правильно регистрируются на консоли, сообщения из SectionScanner не распечатываются, и появляется сообщение об ошибке

log4j:ERROR Attempted to append to closed appender named [console].

Если я закомментирую строку

log4j.logger.search.SectionScanner=ALL, console

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

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Вызывая PropertyConfigurator.configure () в своем коде, вы реконфигурируете log4j после того, как он уже был инициализирован.Независимо от конфигурации, с которой он был инициализирован первым, он также имел приложение с именем «console».Когда вы повторно инициализируете log4j, этот appender закрывается, но какой-то другой поток пытался записать в него: отсюда и ошибка.Если это конфигурация, которую вы хотите использовать, настройте ваше приложение на использование его с самого начала вместо повторной инициализации ведения журнала во время работы приложения.

1 голос
/ 17 июля 2011

Похоже, у вас также есть файл log4j.properties или log4j.xml по умолчанию в вашем classpath, или вы загружаете другой файл свойств, и в файле по умолчанию также определен аппендер log4j.logger.search.SectionScanner.Попробуйте закомментировать эту строку и посмотрите, работает ли она по-прежнему, или убедитесь, что в вашем пути к классам либо нет файла по умолчанию, либо один и тот же аппендер определен дважды в двух разных файлах свойств.

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