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
<!--设置全局返回结果 -->
<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
相关文章推荐
- struts2全局异常处理及配合log4j异常日志记录
- struts2全局异常处理及配合log4j异常日志记录
- Spring-Boot--日志操作全局异常捕获消息处理☞日志控制台输出+日志文件记录
- Struts2 异常处理 ( jsp记录异常信息到日志 )
- Spring-Boot--日志操作【全局异常捕获消息处理☞日志控制台输出+日志文件记录】
- ASP.NET全局错误处理和异常日志记录以及IIS配置自定义错误页面
- SSH框架中配置log4j日志以及Struts2配置异常处理方法
- Spring-Boot--日志操作【全局异常捕获消息处理☞日志控制台输出+日志文件记录】
- Android全局捕获崩溃异常记录日志保存至本地并定时删除
- 从全局眼光看log,异常处理的记录
- struts2配合log4j打印异常栈信息
- Log4j进行日志记录Demo
- asp.net mvc ,asp.net mvc api 中使用全局过滤器进行异常捕获记录
- Struts2配合Log4j打印异常栈信息
- Android中处理崩溃异常和记录日志
- SSH项目中异常处理与日志记录
- 在silverlight中EnitityFramework4.1框架下的以codefirst模式进行后台处理的SQL日志记录方法
- 全局异常处理与异常日志
- Android中处理崩溃异常和记录日志
- SpringMVC对异常进行全局处理,并区分对待ajax和普通请求