您的位置:首页 > 编程语言 > Java开发

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

2014-04-08 13:28 465 查看
在编写代码时除了使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: