blog迁移至:
http://www.micmiu.com
在建的项目需要实现一个详细记录操作日志的需求:
即哪个用户在什么时间做了什么操作,需要把这些日志记录到数据库,提供相应的用户查询、统计以及做一些日志审核。
项目的基本架构:
SSH 即[Spring(v2)、struts(v1)、hibernate(v3)]
为了减小在建项目人力成本、降低修改程度、降低系统的耦合性,同时该项目spring配置中定义的Action bean的名称比较规范统一,所以就考虑用Spring AOP来完成日志记录。
代码及详细配置如下:【
只是初步设计,如果要记录到数据库,注入相应的service即可】
前置消息:LogBeforeAdvice.java
package aoplog;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.aop.MethodBeforeAdvice;
import domain.UserAccount;
/**
*
* @author Michael
*/
public class LogBeforeAdvice implements MethodBeforeAdvice {
/**
* Logger for this class
*/
private static final Logger logger = Logger
.getLogger(LogBeforeAdvice.class);
/**
* @param method
* @param args
* @param target
* @throws Throwable
*/
public void before(Method method, Object[] args, Object target)
throws Throwable {
UserAccount curUser = null;
String methodName = "execute";
for (Object obj : args) {
if (null == obj) {
continue;
}
if (obj instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) obj;
curUser = (UserAccount) request.getSession().getAttribute(
"HUAXIA_CURRENT_USER");
if (StringUtils.isNotEmpty(request.getParameter("method"))) {
methodName = request.getParameter("method");
}
}
}
if (null == curUser) {
logger.info("can not get session user.");
} else {
logger.info("operate user:" + curUser.getUserID());
}
logger.info("logging before advice. class:"
+ target.getClass().getSimpleName() + " method:" + methodName);
}
}
后置消息:LogAfterAdvice.java
package aoplog;
import java.lang.reflect.Method;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.aop.AfterReturningAdvice;
import domain.UserAccount;
/**
* @author Michael
*/
public class LogAfterAdvice implements AfterReturningAdvice {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(LogAfterAdvice.class);
/**
* @param returnObj
* @param method
* @param args
* @param target
* @throws Throwable
*/
public void afterReturning(Object returnObj, Method method, Object[] args,
Object target) throws Throwable {
UserAccount curUser = null;
String methodName = "execute";
for (Object obj : args) {
if (null == obj) {
continue;
}
if (obj instanceof HttpServletRequest) {
HttpServletRequest request = (HttpServletRequest) obj;
curUser = (UserAccount) request.getSession().getAttribute(
"HUAXIA_CURRENT_USER");
if (StringUtils.isNotEmpty(request.getParameter("method"))) {
methodName = request.getParameter("method");
}
}
}
if (null == curUser) {
logger.info("can not get session user.");
} else {
logger.info("operate user:" + curUser.getUserID());
}
logger.info("logging after advice. return obj:" + returnObj);
logger.info("logging after advice. class:"
+ target.getClass().getSimpleName() + " method:" + methodName);
}
}
spring配置文件部分代码
<!-- aop log cfg 自动代理 -->
<bean name="logBefore" class="aoplog.LogBeforeAdvice"></bean>
<bean name="logAfter" class="aoplog.LogAfterAdvice"></bean>
<bean name="loggerAutoProxy"
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Action</value>
<value>*Logout</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>logBefore</value>
<value>logAfter</value>
</list>
</property>
</bean>
部分日志信息:
INFO - LogBeforeAdvice.before(51) | operate user:admin
INFO - LogBeforeAdvice.before(53) | logging before advice.
class:UserAccountMainAction method:displayUserAccountMainScreen
INFO - LogAfterAdvice.afterReturning(51) | operate user:admin
INFO - LogAfterAdvice.afterReturning(53) | logging after advice.
returnobj:ForwardConfig[name=UserAccountMain.screen,
path=/UserAccountMain.jsp,redirect=false,contextRelative=false,module=null]
INFO - LogAfterAdvice.afterReturning(54) | logging after advice.
class:UserAccountMainAction method:displayUserAccountMainScreen
分享到:
相关推荐
灰常简单,适合新手,一看就懂,本来就是新手写的
添加Myeclipse自带的Spring 2.5 AOP librarys 和 Spring 2.5 Core librarys 以及 junit4
本篇文章主要介绍了详解Spring Boot中使用AOP统一处理Web请求日志,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
OP是Spring框架中的一个重要内容,它通过对既有程序定义一个切入点,然后在其前后切入不同的执行内容,这份代码提供了最基础的Spring Boot中使用AOP统一处理Web请求日志得学习
主要介绍了Spring Boot2集成AOPLog来记录接口访问日志,日志是一个Web项目中必不可少的部分,借助它我们可以做许多事情,比如问题排查、访问统计、监控告警等,需要的朋友可以参考下
Spring AOP:以loC为基础讲解Spring下的AOP开发,讲解了3种AOP的开发方式,即使用@Aspect注释符、基于Schema的配置的开发方式和Spring API的开发方式,最后在实际的Java EE项目中实现5种Spring AOP功能(日志记录器...
spring boot 的项目,该项目已成功集成 actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、...
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...
1) aopalliance-1.0.jar aop的工具包 2) commons-logging-1.1.3.jar ... 8) spring-web-3.2.8.RELEASE.jar SpringWeb下的工具包 9) spring-webmvc-3.2.8.RELEASE.jar SpringMVC工具包 10) jstl-1.1.2.jar
该项目已成功集成actuator( 监控)、admin( 可视化监控)、logback( 日志)、aopLog( 通过AOP记录web请求日志)、统一异常处理( json级别和页面级别)、freemarker( 模板引擎)、thymeleaf( ) 模板引擎、Beetl( ) 模板引擎...
actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、...
20 Spring Boot AOP 21 Spring Boot Starter18:31 --快速构建自定义的Spring Boot Starter 22 Spring Boot 日志30:58 --演示了如何在Spring Boot里面使用日志配置,以及logback,log4j2等日志的使用 23 Spring ...
在处理基于Spring的Web应用程序项目时,它很快变得烦人,为每个要创建的新控制器方法添加相同的日志语句。 在团队中工作也使人们忘记或添加未经格式化的日志变得不一致。 这是AOP(面向方面编程)的完美用例。 ...
该项目已成功集成执行器(监控),admin(可视化监控),logback(日志),aopLog(通过AOP记录web请求日志),统一异常处理( json级别和页面级别),freemarker(模板引擎),thymeleaf(模板引擎),Beetl(模板...
actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、...
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + MyBatis)开发的Web应用程序。SSM是一种常用的Java开发框架组合,它结合了Spring框架、Spring MVC框架和MyBatis框架的优点,能够快速构建可靠、...
旅游后台管理系统 1、项目环境 IDEA 2018.2 Mysql 5.5.27 jdk1.8 tomcat7 2、如何启动 1、在启动位置,配置maven,模块为ssm_web,使用tomcat7:run启动 2、网址: 用户:admin 密码:123
Java web项目,基于Java的课堂管理系统,分为教师端和学生端以及管理员端,包含消息系统(websocket实现),博客系统(富文本编译器,支持表情照片等基本功能),操作日志(Spring AOP实现),课程管理(包含班级...
日志 不使用通用日志 使用SLF4J 使用Log4j 二世。 什么是新的在春季3 2。 新特性和增强功能在Spring框架3.0 2.1。 Java 5 2.2。 改进文档 2.3。 新的文章和教程 2.4。 新模块的组织和构建系统 2.5。 概述的新特性 2...
actuator(监控)、admin(可视化监控)、logback(日志)、aopLog(通过AOP记录web请求日志)、统一异常处理(json级别和页面级别)、freemarker(模板引擎)、thymeleaf(模板引擎)、Beetl(模板引擎)、Enjoy(模板引擎)、...