Ведение журнала приложений Tomcat 6 и log4j не выводится

Я пытаюсь запустить ведение журнала приложения log4j (webapp) в приложении 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, но в него ничего не помещается. Это также не отображается ни в каких других журналах, и нет очевидных ошибок. Есть идеи, что происходит?


person Community    schedule 27.05.2009    source источник
comment
вы проверили журнал catalina.out?   -  person Gandalf    schedule 27.05.2009
comment
У меня нет catalina.out. В моем cataline.2009-05-27.log есть стандартные материалы для запуска.   -  person    schedule 28.05.2009


Ответы (4)


Вы уверены, что log4j действительно использует ваш log4j.xml для своей конфигурации, а не другой файл в пути к классам?

Включите системное свойство -Dlog4j.debug, чтобы log4j выводил информацию о том, какой именно файл конфигурации он использует.

person matt b    schedule 27.05.2009
comment
Ну, это глупый вопрос, вы абсолютно уверены, что строки регистрации даже попадают при выполнении кода? Также, кстати, добавление приложения дважды (в root и в com.company.mass) приведет к тому, что сообщения журнала будут отправлены в приложение дважды. - person matt b; 28.05.2009
comment
Глупый вопрос, но хороший. Я попал в index.jsp по умолчанию, который создает Maven, который по совпадению произвел точно такой же результат (Hello World), что и мой сервелт. Переход на страницу с логированием заставил логинг работать. - person ; 28.05.2009
comment
по моему опыту, лучше всего работало, когда файл log4j.properties находился в том же каталоге, что и файл log4j.jar. не уверен, что то же самое с конфигурацией .xml, но я уверен, что так и должно быть. - person djangofan; 05.11.2010

Не уверен, нужен ли вам приоритет в корневом регистраторе. Попробуйте эту конфигурацию

<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>
person Mike Pone    schedule 27.05.2009
comment
К сожалению, эти изменения не помогли. - person ; 27.05.2009

Попробуйте добавить строку:

<param name="Threshold" value="ALL" />

в вашу конфигурацию massAppender

и эта линия

<priority value ="debug"/>

внутри вашего корневого определения

person Gandalf    schedule 27.05.2009
comment
Это не имеет значения. - person ; 28.05.2009
comment
у моего Tomcat6 даже нет файла конфигурации с massAppender. - person djangofan; 05.11.2010

Когда я столкнулся с этой проблемой, я смог решить ее, добавив common-logging.jar в свою сборку развертывания.

person Ruudy Garcia    schedule 13.04.2012