2010-02-04 2 views
5

Какой регистратор я перечисляю в своем log4j.xml для захвата необработанных строк 2 исключения?Log4j Logger for Struts 2 Except Interceptor

Я следующий код объявлен в моем struts.xml:

<package name="default" extends="struts-default"> 
    <interceptor-stack name="defaultStack"> 
     <interceptor-ref name="timer"/> 
    <interceptor-ref name="logger"/> 
     <interceptor-ref name="exception"> 
      <param name="logEnabled">true</param> 
      <param name="logCategory">error.unhandled</param> 
      <param name="logLevel">WARN</param> 
     </interceptor-ref> 
    </interceptor-stack> 
</package> 

В моем файле log4j.xml, я следующий регистратор заявил:

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%p [%c] - %C{1}.%M(%L) | %m%n"/> 
    </layout> 
</appender> 
<logger name="error.unhandled"> 
    <level value="DEBUG"/> 
    <appender-ref ref="CONSOLE" /> 
</logger> 

Однако, когда Struts бросает исключение, он не правильно регистрируется log4j. Я знаю, что мой log4j.xml обрабатывается правильно, так как я могу вручную создать класс java с регистратором под названием «error.unhandled» и написать сообщения уровня ERROR непосредственно на него. Коллега также предположил, что я должен попытаться поймать log4j.logger.error.unhandled logger, но это тоже не сработало.

Какой регистратор использует Struts 2 для перехватчика исключения?

+0

Можете ли вы вручную зарегистрировать что-то на уровне WARN и показать его в журнале? – skaffman

+0

Какой тип контейнера вы используете? (т. е. Tomcat, JBoss, WebSphere) –

ответ

0

Вы используете уровень журнала WARN в определении вашего перехватчика. Измените это на ERROR, и вы увидите сообщения журнала, или, наоборот, уменьшите уровень регистратора до WARN, INFO или DEBUG в файле log4j.xml.

Другими словами, перехватчик отправляет сообщение на уровне WARN, консольное приложение получает это сообщение, но выбирает, чтобы его не печатать, поскольку он настроен на печать только сообщений на уровне ERROR.

+0

Я понизил уровень ошибок вплоть до DEBUG, но это не помогло. Любые другие идеи? – David

+0

struts использует общедоступные записи, поэтому, возможно, ваша проблема лежит в другом месте. Правильно ли настроены commons-logging и log4j? – Yoni

+0

Где я могу настроить ведение журналов? Я только сконфигурировал log4j.xml – David

0

Ваш регистратор в log4.xml имеет свой порог, установленный в ERROR, поэтому все, что регистрируется ниже этого уровня, не записывается. Конфигурация ваших расположений настроена на журнал на уровне WARN, который ниже ERROR.

Возможно, вы должны уменьшить порог в log4j.xmllogger до WARN, чтобы получить что-либо.

+0

Я понизил уровень ошибки вплоть до DEBUG, но это не помогло. Любые другие идеи? – David

4

Что вы хотите сделать, это предоставить параметры для перехватчика исключения в стеке перехватчиков по умолчанию. В примере, опубликованном в вопросе, вы переопределяете стек по умолчанию.

Решение взято из официальной вики: https://cwiki.apache.org/WW/exception-handling.html

Чтобы включить ведение журнала исключений быть обработаны в 2 рамки Struts необходимо указать несколько значений параметров в struts.xml.

<interceptors> 
    <interceptor-stack name="appDefaultStack"> 
    <interceptor-ref name="defaultStack"> 
    <param name="exception.logEnabled">true</param> 
    <param name="exception.logLevel">ERROR</param> 
    </interceptor-ref> 
</interceptor-stack> 
</interceptors> 

<default-interceptor-ref name="appDefaultStack" />