Недетерминированное ведение журнала с использованием JRuby + Tomcat6 + log4j - PullRequest
2 голосов
/ 26 января 2012

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

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

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

1 Ответ

3 голосов
/ 29 января 2012

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

Это просто короткое замыкание в темноте, но каждый раз, когда я испытываю что-то странное с log4j и / или Commons Logging Я сразу вспоминаю и вновь обращаюсь к хорошо документированным проблемам, особенно с последним (см. Подумайте еще раз, прежде чем принимать API ведения журнала общего пользования или еще более полную версию Таксономия проблем загрузчика классов, возникающих при использовании Jakarta Commons Logging ), кратко изложенных в ответе delfuego для log4j и загрузчик классов контекста потока :

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

Учитывая саму природу проблемы загрузчика классов, я мог бы себе представить, что она также спровоцировала вашу проблему, то есть в зависимости от того, какой загрузчик классов в настоящее время завершил подключение в журнале, он может использовать другой путь поиска свойств ведения журнала и соответствующие значения по умолчанию, см. Почему log4j не может найти мой файл свойств в приложении J2EE или WAR? :

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

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

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

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

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

Удачи!

...