struts2全局异常处理及配合log4j进行异常日志记录

在编写代码时除了使用try catch来捕获异常之外,还可以用struts2的声明式异常处理,即在Action中直接抛出异常交给struts2来处理,并且在xml文件中进行相应的配置,如下:
<!--设置全局返回结果 -->
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<!--定义要捕获的异常-->
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>

</global-exception-mappings>


以上是全局异常的处理,也可以处理特定Action的异常,如下:
<action name="login" class="userAction" method="login">
<exception-mapping result="login"exception="com.exceptions.LoginException">
</exception-mapping>
<result name="login">/webPage/exception/login_error.jsp</result>

</action>


特定Action的异常声明优先于全局异常。
至于配合log4j记录异常日志是利用struts2中提供的异常拦截器
ExceptionMappingInterceptor,当发生指定异常后,会由它处理,因为这个类有写日志的功能,默认是禁用的,因此直接将其启用即可,如下:
<interceptor-ref name="defaultStack">
<!--覆盖defultStack中的exception设置,启用它的日志功能-->
<param name="exception.logEnabled">true</param>
<param name="exception.logLevel">error</param>
</interceptor-ref>

为了同时将日志信息写入数据库我们如下配置lo4j配置文件
log4j.properties文件配置如下:
#定义根目录日志 ,第一个为日志级别,第二个为输出目的,如:log4j.rootLogger=error,appender1,appender2,...
#下面的配置就是用appender1,appender2, ...作为附加器,如:log4j.appender.console=org.apache.log4j.ConsoleAppender中console就是appender2
log4j.rootLogger=error, database, console
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE

###################
# Console Appender
###################
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%p] - %m%n

########################
# JDBC Appender
#######################
log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
log4j.appender.database.driver=com.mysql.jdbc.Driver
log4j.appender.database.user=root
log4j.appender.database.password=root
log4j.appender.database.sql=insert into errorlog (className,methodName,occurTime,LogLevel,msg) values ('%c%l','%M','%d{yyyy-MM-dd HH:mm:ss}','%p','%m')
log4j.appender.database.layout=org.apache.log4j.PatternLayout
log4j.appender.database.layout.ConversionPattern=%d [%p] - %m%n

#create table errorLog(
#id integer primary key AUTO_INCREMENT comment '日志id',
#className varchar(256) comment '异常类名',
#methodName varchar(64) comment '发生异常所在的方法',
#occurTime DATETIME not null comment '异常发生的时间',
#logLevel varchar(16) not null comment '异常的级别',
#msg text not NULL comment '异常详细信息',
#isRead boolean default false comment '是否已经阅读过',
#isResolve boolean default false comment '是否解决这个错误',
#resoleTime datetime comment '解决时间'
#);

本文转载自:http://www.open-open.com/lib/view/open1381838615098.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值