2010-02-04 14 views
5

¿Qué logger enumero en mi log4j.xml para atrapar struts no controlados 2 excepciones?Log4j Logger para Struts 2 Exception Interceptor

he declarado el código siguiente en mi 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> 

En mi archivo log4j.xml, tengo los siguientes registrador declarado:

<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> 

Sin embargo, cuando se emite una Struts excepción, log4j no registra correctamente. Sé que mi log4j.xml se está analizando correctamente, ya que puedo crear manualmente una clase java con un registrador llamado "error.unhandled" y escribir mensajes de nivel ERROR directamente en él. Un colega también sugirió que debería intentar atrapar el logger log4j.logger.error.unhandled pero eso tampoco funcionó.

¿Qué registrador utiliza Struts 2 para el interceptor de excepción?

+0

¿Puede registrar manualmente algo en el nivel WARN y hacer que aparezca en el registro? – skaffman

+0

¿En qué tipo de contenedor se está desplegando? (es decir, Tomcat, JBoss, WebSphere) –

Respuesta

0

Está utilizando el nivel de registro WARN en su definición de interceptor. Cambie eso a ERROR y verá los mensajes de registro o, alternativamente, reducirá el nivel de registro a WARN, INFO o DEBUG en el archivo log4j.xml.

En otras palabras, el interceptor envía un mensaje a nivel WARN, la consola appender recibe ese mensaje, pero elige no imprimir porque está configurado para imprimir sólo los mensajes al nivel de error.

+0

Bajé el nivel de error hasta DEPURAR, pero no ayudó. ¿Alguna otra idea? – David

+0

struts utiliza el registro de commons, por lo que tal vez su problema se encuentre en otra parte. ¿Son comunes-logging y log4j ambos configurados correctamente? – Yoni

+0

¿Dónde debo configurar el registro de commons en? Solo configuré log4j.xml – David

0

Su registrador en log4.xml tiene su umbral establecido en ERROR, por lo que no se registrará nada registrado por debajo de ese nivel. La configuración de struts está configurada para iniciar sesión en el nivel WARN, que está por debajo de ERROR.

Probablemente debería reducir el umbral en el log4j.xmllogger a WARN, para obtener cualquier cosa.

+0

Bajé el nivel de error hasta DEPURAR, pero no ayudó. ¿Alguna otra idea? – David

4

Lo que quiere hacer es proporcionar parámetros para el interceptor de excepciones en la pila del interceptor predeterminado. En el ejemplo publicado, estás redefiniendo la pila predeterminada.

solución se toma de wiki oficial: https://cwiki.apache.org/WW/exception-handling.html

para habilitar el registro de las excepciones que se manipulen por el marco de trabajo Struts 2 debe especificar algunos valores de los parámetros en 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" /> 
Cuestiones relacionadas