struts 2 异常处理问题

在struts 2, 当action抛exception,如何扑捉异常信息将其写入指定error log文件。希望给出相关代码。谢谢
[b]问题补充:[/b]
我想要的效果是:在action中不catch任何exceptoin:

[code="java"] public String execute() throws Exception {

    return Action.SUCCESS;
}[/code]

在struts.xml中将exception导航到exception.jsp:

[code="java"]
/exception.jsp

    <global-exception-mappings>
        <exception-mapping exception="java.lang.Exception" result="exception"/>
    </global-exception-mappings>[/code]

但是,在这种情况下,exception没有写入error log文件。不知道有无一种简单、便利的方式一个action出了错误信息,直接执行相应代码写log,就像配置global-exception-mapping一样。这样就可避免每个action都去catch exception然后写log
[b]问题补充:[/b]
to lovewhzlq:

[quote]做一个struts2的拦截器应该可以,对所有的异常进行记录到日志[/quote]

我也想到做一个拦截器,但怎么做呢?能否详细点?

自然就是实现一个拦截图,然后对每个action的调用,都用

try
{
//假设这是action的执行方法
action.execute();
}catch(Exception e)
{
//这里就可以记录日志信息了,可以封装各种异常做不同的记录,
log.error("xxx",e);
}

直接用log4j就可以了。去找一下log4j如何写日志到文件的方法

log4j去搞嘛

private static Logger log = Logger.getLogger(xxx.class);

public String execute()
{
//.....

try
{

       .......
    } catch(IOException e)
    {
        log.error("文件异常", e);

    }

}

再搞个log4j.properties文件

[code="java"]

#设置logger和level
log4j.rootLogger=INFO, R, DR, stdout

Print only messages of level WARN or above in the package org.hibernate.

log4j.logger.org.hibernate=WARN
log4j.logger.net.sf=WARN
log4j.logger.org.apache=ERROR
log4j.logger.com.jasson.im.sys.util.HibernateUtil=ERROR

#控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=debug
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

#每天产生一个日志文件
log4j.appender.DR=org.apache.log4j.DailyRollingFileAppender
log4j.appender.DR.Threshold=ERROR
log4j.appender.DR.File=${webapp.root}/pct_error.log
log4j.appender.DR.Append=false
log4j.appender.DR.DatePattern='_'yyyy-MM-dd'.log'
log4j.appender.DR.layout=org.apache.log4j.PatternLayout
log4j.appender.DR.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

#文件大小达到指定尺寸时产生新文件
log4j.appender.R=org.apache.log4j.RollingFileAppender
#Log输出级别
log4j.appender.R.Threshold=INFO
log4j.appender.R.Append=false
#输出的日志文件名
log4j.appender.R.File=${webapp.root}/pct_info.log
#指定文件大小
log4j.appender.R.MaxFileSize=5120KB
#产生新文件,原文件名为log.html.1,...,log.html.MaxBackupIndex
log4j.appender.R.MaxBackupIndex=10
#文件格式
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n

#SOCKET
log4j.appender.SOCKET=org.apache.log4j.net.SocketAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=4445

[/code]

一般记录是有必要的,但是异常要考虑异常处理。
比如添加用户,抛出一个UserExistException,是要在程序中处理它的。
当然异常应该包括在最初的系统设计中。

做一个struts2的拦截器应该可以,对所有的异常进行记录到日志