Проблема с настройкой Commons Logging / Log4j в весеннем веб-приложении с tomcat 6 - PullRequest
15 голосов
/ 20 октября 2008

У меня проблема с настройкой регистрации в веб-приложении apring, развернутом под tomcat 6.

Веб-приложение использует API-интерфейс регистрации общего доступа, во время выполнения должен использоваться log4j. Файл журнала создан, но остается пустым - никаких записей журнала не происходит.

установка следующая:

WEB-INF / web.xml:

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

WEB-INF / классы / commons-logging.properties:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

WEB-INF / log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    ...
  </appender>
  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/my.log"/>
    ...
  </appender>

  <logger name="my.package">
    <level value="INFO"/>
  </logger>

  <root>
    <level value="ERROR"/>
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>
</log4j:configuration>

Файл logs / my.log создан, но журналы не отображаются. Это информационные журналы на консоли Tomcat, но не с настроенным шаблоном макета.

commons-logging-1.1.1.jar и log4j-1.2.14.jar включены в WEB-INF / lib. Есть идеи, что тут не так?

Ответы [ 6 ]

10 голосов
/ 20 октября 2008

В Интернете имеется множество документированных примеров, предупреждающих людей об использовании регистрации общего достояния. Настолько, что SLF4J набирает большую популярность.

Учитывая, что вы не заинтересованы в использовании Tomcat с Log4j, вам следует просто использовать Log4j непосредственно в вашем приложении. Особенно, если нет шансов, что вы будете переключать каркасы журналов в будущем. Это уменьшит сложность вашего приложения и избавит вас от любых проблем с загрузчиком классов, которые возникают у вас при использовании общего журнала.

Это должен быть относительно простой поиск и замена в вашем тексте, так как commons-logging и log4j оба используют одинаковую структуру вызовов для своих методов регистрации.

5 голосов
/ 22 октября 2008

Будьте особенно осторожны, если вы не поместили log4j.jar в каталог Tomcat commons / lib. Если корневой загрузчик классов загружает библиотеки log4j, вы столкнетесь с конфликтами и проблемами инициализации, когда ваши веб-приложения также попытаются использовать log4j.

Если вам нужно использовать log4j для обычной регистрации в Tomcat, вам нужно быть осторожным, чтобы ваши веб-приложения также не пытались загрузить log4j. Если у вас есть несколько веб-приложений на сервере, то вам нужно будет дисциплинировать, чтобы инициализация журнала каждого веб-приложения не давила инициализации других веб-приложений. Каждое веб-приложение должно будет использовать уникальные идентификаторы Logger, которые могут быть выполнены с уникальными именами пакетов.

Использование общего log4j в Tomcat с несколькими веб-приложениями вызывает серьезные конфликты, когда у вас есть общие библиотеки, которые все хотят вести журналы, такие как Hibernate или Spring. Следующее веб-приложение, которое пытается инициализировать log4j, может закрыть регистратор предыдущего. Это может быть беспорядок.

3 голосов
/ 01 апреля 2011

У меня была похожая проблема, и я нашел решение сейчас. Запустите tomcat с дополнительным параметром:

-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl

1 голос
/ 20 октября 2008

Вам необходимо скомпилировать дополнительный компонент для полного ведения общего журнала. По умолчанию Tomcat 6 использует жестко запрограммированную реализацию ведения журнала общего достояния, которая всегда делегирует java.util.logging.

Инструкция по сборке здесь http://tomcat.apache.org/tomcat-6.0-doc/building.html

Затем замените tomcat-juli.jar в каталоге / bin Tomcat и поместите tomcat-juli-adapters.jar в каталог / lib вместе с log4j и config.

0 голосов
/ 28 сентября 2010

если вы используете log4j + обычное ведение журнала, вы можете избежать большинства вышеперечисленных конфигураций. общие журналы LogFactory имеют функцию обнаружения, аналогичную JAXP, в следующем порядке, при поиске реализаций журнала, 1. атрибут конфигурации org.apache.commons.logging.Log внутри файла commons-logging.properties 2. системное свойство org.apache.commons.logging.Log 3. Если Log4J доступен по пути к классам, используйте соответствующий класс-оболочку (Log4JLogger). 4. Jdk14Logger 5. SimpleLog

просто убедитесь, что и common-logging.jar и common-logging-api.jar и log4j.jar в classpath

0 голосов
/ 18 февраля 2010

Может быть, я ошибаюсь. Пожалуйста, попробуйте следующее:

A) Добавить appender в my.package как: OR Б) Уменьшите уровень журнала root до INFO

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