Журналирование приложений Tomcat 6 и log4j не выдает никаких результатов
Вопрос
Я пытаюсь заставить журналирование приложения log4j (веб-приложение) работать в приложении Tomcat 6.У меня есть log4j-1.2.15.jar в моем каталоге WEB-INF, log4j.dtd и log4j.xml в WEB-INF/classes.
Мой log4j.xml выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="massAppender" class="org.apache.log4j.RollingFileAppender">
<param name="maxFileSize" value="100KB" />
<param name="maxBackupIndex" value="2" />
<param name="File" value="${catalina.home}/logs/mass.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}: %m%n " />
</layout>
</appender>
<category name="com.company.mass">
<priority value="DEBUG"/>
<appender-ref ref="massAppender"/>
</category>
<root>
<appender-ref ref="massAppender" />
</root>
</log4j:configuration>
Мой сервлет находится в пакете:
package com.company.mass;
где регистратор объявлен как:
private static Logger logger = Logger.getLogger(Handler.class);
и в верхней части моего метода doGet(...) есть:
logger.error("foo");
Когда я развертываю приложение в Tomcat и перехожу к сервлету, оно работает правильно.Я даже получаю файл Mass.log, но в него ничего не помещается.Он также не отображается ни в каких других журналах, и явных ошибок нет.Есть идеи, что происходит?
Решение
Вы уверены, что log4j действительно использует ваш log4j.xml
для его конфигурации, а не для другого файла в пути к классам?
Включить системное свойство -Dlog4j.debug
чтобы log4j распечатывал информацию о том, какой именно файл конфигурации он использует.
Другие советы
Не уверен, нужен ли вам приоритет в корневом регистраторе.Попробуйте эту конфигурацию
<category name="com.company.mass">
<priority value="DEBUG"/>
<!-- no need to specify appender again here -->
</category>
<root>
<priority value="INFO"/>
<appender-ref ref="massAppender" />
</root>
Попробуйте добавить строку:
<param name="Threshold" value="ALL" />
в вашу конфигурацию MassAppender
и эта линия
<priority value ="debug"/>
внутри вашего корневого определения
Когда я столкнулся с этой проблемой, я смог решить ее, добавив common-logging.jar
к моей сборке развертывания.