Log4j Logger для Struts 2 Exception Interceptor - PullRequest
5 голосов
/ 04 февраля 2010

Какой регистратор я перечислю в моем log4j.xml, чтобы перехватить необработанные распорки 2 исключений?

В моем файле 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 и напрямую писать в него сообщения об ошибках. Коллега также предложил мне попробовать перехватить регистратор log4j.logger.error.unhandled, но это тоже не сработало.

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

Ответы [ 3 ]

5 голосов
/ 03 августа 2012

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

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

Чтобы включить ведение журнала исключений, обрабатываемых средой Struts 2, необходимо указать некоторые значения параметров в 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" />
0 голосов
/ 04 февраля 2010

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

Вам, вероятно, следует уменьшить пороговое значение в log4j.xml logger до WARN, чтобы получить что-либо.

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

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

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

...