Dav*_*vid 5 java log4j struts2
我在log4j.xml中列出哪个记录器来捕获未处理的struts 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>
Run Code Online (Sandbox Code Playgroud)
在我的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>
Run Code Online (Sandbox Code Playgroud)
但是,当Struts抛出异常时,log4j没有正确记录它.我知道我的log4j.xml正在被正确解析,因为我可以手动创建一个带有名为"error.unhandled"的记录器的java类,并直接向它写入ERROR级别的消息.一位同事还建议我应该尝试捕获log4j.logger.error.unhandled记录器,但这也不起作用.
Struts 2使用哪个记录器用于异常拦截器?
小智 5
您要做的是为默认拦截器堆栈中的异常拦截器提供参数.在发布的示例中,您正在重新定义默认堆栈.
解决方案来自官方维基: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" />
Run Code Online (Sandbox Code Playgroud)
您在拦截器定义中使用日志级别 WARN。将其更改为 ERROR,您将看到日志消息,或者在 log4j.xml 文件中将记录器级别降低为 WARN、INFO 或 DEBUG。
换句话说,拦截器发出 WARN 级别的消息,控制台附加程序接收该消息,但选择不打印它,因为它被配置为仅打印 ERROR 级别的消息。