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

StackOverflow https://stackoverflow.com/questions/217929

  •  03-07-2019
  •  | 
  •  

Вопрос

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

Веб-приложение использует API Commons-Logging, во время выполнения следует использовать log4j.Файл журнала создается, но остается пустым — записей в журнале не происходит.

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

ВЕБ-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/classes/commons-logging.properties:

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

ВЕБ-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.Есть идеи, что здесь не так?

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

Вам необходимо скомпилировать дополнительный компонент для полноценного ведения журнала Commons.По умолчанию Tomcat 6 использует жестко запрограммированную реализацию ведения журнала commons, которая всегда делегирует полномочия 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.

если вы используете log4j +common logging, вы можете избежать большинства вышеуказанных конфигураций.Common Turging Logfactory имеет функцию обнаружения, аналогичную JAXP, в соответствии с приоритетом, поиск реализаций журнала, 1.Атрибут конфигурации org.apache.commons.logging.log Inside file 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 находятся в пути к классам.

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

А) Добавьте приложение в my.package как:ИЛИБ) Уменьшите уровень журнала root до INFO.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top