2012-01-25 2 views
2

Я использую log4j для входа в приложение JRuby on Rails. Каждый раз, когда я выталкиваю приложение, журналы присоединяются к различным конечным адресатам. Иногда это каталина. иногда это localhost-date.log. иногда это catalina-date.log.Недетерминированное ведение журнала с использованием JRuby + Tomcat6 + log4j

Я не совсем уверен, почему это не одно и то же каждый раз.

Что я могу проверить, почему журналы настолько ненадежны в моей среде?

ответ

3

Это довольно странно - вы случайно используете Apache Commons Logging?

Это всего лишь короткое замыкание в темноте, но каждый раз, когда я испытываю что-то странное с log4j и/или Commons Logging я сразу вспоминаю и вернуться к хорошо документированные проблемами с последним конкретно (см Think again before adopting the commons-logging API, или даже более полным версия Taxonomy of class loader problems encountered when using Jakarta Commons Logging), кратко суммированы в ответ delfuego для log4j and the thread context classloader:

Вы, кажется, что наткнулся на серьезную проблему с log4j (и Apache Commons Logging библиотеки), а именно, что они имеют смехотворно трудное время обнаружения nd, взаимодействующих с правыми загрузчиками классов, как , они используются.

Учитывая самое природу вопроса загрузчика, я мог себе представить, что размыкание вашей проблемы, а также, то есть в зависимости от Загрузчик классов в настоящее время закончилась проводка в ваших лесозаготовках, он может использовать различные свойства протоколирования поиска пути и соответствующие значений по умолчанию а также см Why can't log4j find my properties file in a J2EE or WAR application?:

короткий ответ: классы log4j и файл свойств не в пределах одного и того же загрузчиком классов.

Длинный ответ (и что с ним делать): контейнеры J2EE или Servlet используют систему загрузки классов Java. Sun изменил способ загрузки классов работает с выпуском Java 2. В Java 2 загрузчики классов расположены в иерархическом соотношении родитель-потомок. Когда дочернему загрузчику классов необходимо найти класс или ресурс, он сначала делегирует запрос родительскому элементу. [...]

Названные проблемы, как правило, легко исправить путем переключения на Simple Logging Facade for Java (SLF4J) в самом деле (. Что случается иметь один и тот же автор, как log4j кстати, Ceki Gülcü), а также предложил delfuego:

[...] сообщение о взятии на посадку состоит в том, что одним из основных движущих сил для является новая система регистрации SL4J, которая должна была полностью устранить эти проблемы . Вы можете захотеть поменять его и посмотреть, будет ли ваша жизнь сделана .

Наконец, Джон (по состоянию на сегодняшний день нерешенной) приключения с Logging with log4j on tomcat jruby-rack for a Rails 3 application, кажется, намекают на соответствующих вопросов и возможного решения через SL4J а.

Удачи вам!

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