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

来源:互联网 发布:socket长连接 java 编辑:程序博客网 时间:2024/06/05 02:29
在编写代码时除了使用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
0 0
原创粉丝点击