Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Struts 2异常拦截器的Log4j记录器_Java_Struts2_Log4j - Fatal编程技术网

Java Struts 2异常拦截器的Log4j记录器

Java Struts 2异常拦截器的Log4j记录器,java,struts2,log4j,Java,Struts2,Log4j,我应该在log4j.xml中列出哪个记录器来捕获未处理的struts 2异常 我在struts.xml中声明了以下代码: <package name="default" extends="struts-default"> <interceptor-stack name="defaultStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/>

我应该在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>

真的
错误。未处理
警告
在我的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被正确解析,因为我可以使用名为“error.unhandled”的记录器手动创建一个java类,并将错误级别的消息直接写入其中。一位同事还建议我尝试捕获log4j.logger.error.unhandled记录器,但这也不起作用


Struts 2将哪个记录器用于异常侦听器?

您在侦听器定义中使用的是日志级别警告。将其更改为ERROR,您将看到日志消息,或者在log4j.xml文件中将记录器级别降低为WARN、INFO或DEBUG


换句话说,拦截器以警告级别发送消息,控制台附加器接收该消息,但选择不打印,因为它被配置为仅打印错误级别的消息。

您在
log4.xml
中的记录器的阈值设置为
ERROR
,因此,任何记录在该级别以下的内容都不会被记录。struts配置设置为在
WARN
级别进行日志记录,该级别低于
ERROR


您可能应该将
log4j.xml
logger
中的阈值降低到
WARN
,以便获取任何信息。

您要做的是在默认侦听器堆栈中为异常侦听器提供参数。在所讨论的示例中,您正在重新定义默认堆栈

解决方案取自官方维基:

为了能够记录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" />

真的
错误

我将错误级别一直降低到了调试阶段,但没有起到任何作用。还有其他想法吗?我一直在降低错误级别以进行调试,但没有任何帮助。还有其他想法吗?struts使用commons日志记录,所以问题可能出在其他地方。commons logging和log4j都配置正确吗?我应该在哪里配置commons logging?我只配置了log4j.xmlcomons-logging,它没有配置文件,它被设计为“传递”日志请求到另一个日志库,比如log4j。如果我没记错的话,您需要在webapp lib库中包含commons-logging-api.jar和commons-logging.jar,但这是一个完全不同的主题。。。祝您好运:)JCL有commons-logging.properties文件,但在大多数情况下不需要它。您可以手动记录警告级别的内容并将其显示在日志中吗?您要部署到哪种类型的容器?(即Tomcat、JBoss、WebSphere)