在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
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的拦截器应该可以,对所有的异常进行记录到日志