2010-09-08 2 views
1

У меня было время, пытаясь разобраться с регистрацией в моем проекте. В частности, одна из сторонних библиотек, которую мы используем, имела один класс com.foo.bar.baz.java, который игнорировал любую конфигурацию в файле свойств для пакета com.foo.bar, вместо этого следуя свойствам всей области приложения.Log4j category weirdness

В конечном счете с использованием %c в макете шаблона Я узнал, что Log4J регистрировал его как Windows, а не его пакет.

Что может быть причиной этого? Это доказывает замечательно доказательство Google.

ответ

1

Это может быть связано с множеством причин. Можете ли вы опубликовать свой файл конфигурации журнала? У вас есть проект gui? Вы (или сторонняя библиотека) пытаетесь подключиться к компонентам gui?

Можете ли вы просмотреть конфигурационные файлы log4j вашей сторонней библиотеки?


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

Например, наше приложение работает на Tomcat, а в файле server-config.xml есть раздел <logging>, который позволяет указать целевую целевую страницу ведения журнала для сервера.

В качестве другого примера, я был укушен десятками раз от rogue commons-logging.properties файлов, которые могут изменить всю функциональность всего журнала, всего приложения, просто изменив несколько свойств. Кроме того, эти файлы указывают флаг приоритета, и если какой-либо файл свойств находится в пути к классу с более высоким приоритетом, чем тот, который указан в вашем проекте, он имеет приоритет!


В целом, здесь есть много потенциальных проблем. Чтобы получить дополнительную помощь, мне понадобится немного больше информации.

+0

Ведение журнала не имеет ничего общего с компонентами графического интерфейса, а сторонняя библиотека не имеет собственного файла log4j.properties. В его конфигурационном файле есть опция указать, какой файл lo4j использовать - это работает правильно, так как большинство записей в библиотеке работает так, как должно быть. – Andy

+0

Благодаря вашим вопросам я подробно рассмотрел конфигурационный файл библиотеки, и выяснилось, что у него есть определенная опция для отключения регистрации событий, которые вызывали у меня проблемы. Это единственный элемент с таким вариантом, поэтому я могу только предположить, что за кулисами что-то странное. – Andy

+0

Рад, что я мог бы помочь в некотором роде. Ведение журнала может иногда раздражать, потому что существует так много точек контроля. Легко тратить много времени на отладку совершенно хорошего конфигурационного файла, чтобы позже узнать, что файл конфигурации не имеет ничего общего с этой проблемой. У меня была зависимость, которая отключила всю запись в моем приложении только потому, что она ссылалась на определенную банку SLF4J. Потребовалось 3 дня для отладки, потому что, естественно, я сначала посмотрел во все неправильные места! – gMale

2

Не забывайте, что, хотя использование полного имени класса является обычным соглашением, это не является обязательным требованием!

Автор совершенно свободен использовать любую строку, которую они хотят в качестве имени Logger, и звучит так, как будто в этом случае они пошли на имя, основанное на компонентах.