spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
2008-07-16 23:37
495 查看
导读:
spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
这个东西怎么做:spring aop 面向切面编程 如何来做一个强大的日志记录功能模板;
昨天经理把这个任务交给我,让我为公司现在的项目加上一个详细的日志记录功能模板,对所有的操作,至少是增删改运作进行一个记录,其要记录操作者,以及执行的方法,IP,以及操作的方法的参数.
我以前做过类似的功能,不过是在filter里做的,通过filter来检查action请求,记录请求中的参数及action名字.但是今天公司这个是要求用spring aop来做,这样就可以在spring里对要进行的日志记录方法进行一个配置.而且这样也就可以无缝集成到现有的系统中去了.
不过,很郁闷的是,我还没用这样做过,或者类似的功能.
==========================
哈哈,很爽,居然让我做好了.
其实也很简单,使用AOP的@AspectJ来做就可以了,方法步骤如下:
第一:>>在spring的配置文件里增加以下配置
如果发现插入后,eclipse提示这行有错误,那可能是你的spring配置有问题,你对照一下我的spring里的beans的头:
关于spring和AOP及@aspectj配置可以参考一下我收藏的以下文章
基于@AspectJ配置Spring AOP之一==>http://www.busfly.cn/csdn/post/700.html
Spring 2.0的新特性之@AspectJ==>http://www.busfly.cn/csdn/post/699.html
AspectJ如何实现AOP==>http://www.busfly.cn/csdn/post/698.html
Spring 2.0中的AOP实现-aspectj-Advice==>http://www.busfly.cn/csdn/post/693.html
第二:>>配置一下@AspectJ 的bean,这个Bean就是一个普通的java对象bean,按照普通的bean来配置就行了,我的这个处理切面的bean配置如下 (包含了第一步的配置):
id
id
userName
第三:>>在这个切点处理bean类里,在class定义的上一行加上切面定义标签,如下:
@Aspect
// 切面定义标签
public class LogAspect {
private UserSession sessionValue; // 当前操作员基本信息
private String userIpAddress; // 当前操作员IP地址
第四:>>定义切点及处理方法
@Pointcut("execution(* *.*.*.service..*.insert*(..)) || execution(* *.*.*.service..*.update*(..)) "
+ "|| execution(* *.*.*.service..*.remove*(..))"
+ "|| execution(* *.*.*.service..*.delete*(..))")
public void insertPointcut() {
}
可以在@Pointcut定义下面的这个函数里写上要处理的代码,也可以进行更多更多大的扩展,我的项目里就是做了扩展处理,在上面这个函数里没添加任何方法处理,而是在后面扩展,也就是所谓的Advice吧,请看下一步
第五:>>Advice扩展处理
@AfterReturning("insertPointcut()")
public void insertLogInfo(JoinPoint joinPoint)
throws Exception{
/*处理代码,略*/
}
=====================================
好了,完成了,是不是很容易.在第五步的这个方法里有一个参数,这个参数也许就是切面自己传进来的,所以你就这样写吧,JoinPoint 对象里可以获取切面切点的相关信息,如方法名,参数,类路径,类名等等,这样我们就可以来记录操作者进行的操作的详细信息,比如执行的方法名,其所在的对象类名,操作方法里带的所有参数信息,等,再加上自己另外获取一些信息,比如,当前操作时间,操作用户,还可以根据以上信息来定义操作类别等等
本文里源码下载,只是关键的一个spring配置文件和那个bean,其它的文件没上传上来.转载者请将附件上传到你的服务器上http://www.busfly.cn/post/spring-aop-aspectj-advice-log.html
spring aop 面向切面编程 如何来做一个强大的日志记录功能.原创
这个东西怎么做:spring aop 面向切面编程 如何来做一个强大的日志记录功能模板;
昨天经理把这个任务交给我,让我为公司现在的项目加上一个详细的日志记录功能模板,对所有的操作,至少是增删改运作进行一个记录,其要记录操作者,以及执行的方法,IP,以及操作的方法的参数.
我以前做过类似的功能,不过是在filter里做的,通过filter来检查action请求,记录请求中的参数及action名字.但是今天公司这个是要求用spring aop来做,这样就可以在spring里对要进行的日志记录方法进行一个配置.而且这样也就可以无缝集成到现有的系统中去了.
不过,很郁闷的是,我还没用这样做过,或者类似的功能.
==========================
哈哈,很爽,居然让我做好了.
其实也很简单,使用AOP的@AspectJ来做就可以了,方法步骤如下:
第一:>>在spring的配置文件里增加以下配置
如果发现插入后,eclipse提示这行有错误,那可能是你的spring配置有问题,你对照一下我的spring里的beans的头:
关于spring和AOP及@aspectj配置可以参考一下我收藏的以下文章
基于@AspectJ配置Spring AOP之一==>http://www.busfly.cn/csdn/post/700.html
Spring 2.0的新特性之@AspectJ==>http://www.busfly.cn/csdn/post/699.html
AspectJ如何实现AOP==>http://www.busfly.cn/csdn/post/698.html
Spring 2.0中的AOP实现-aspectj-Advice==>http://www.busfly.cn/csdn/post/693.html
第二:>>配置一下@AspectJ 的bean,这个Bean就是一个普通的java对象bean,按照普通的bean来配置就行了,我的这个处理切面的bean配置如下 (包含了第一步的配置):
id
id
userName
第三:>>在这个切点处理bean类里,在class定义的上一行加上切面定义标签,如下:
@Aspect
// 切面定义标签
public class LogAspect {
private UserSession sessionValue; // 当前操作员基本信息
private String userIpAddress; // 当前操作员IP地址
第四:>>定义切点及处理方法
@Pointcut("execution(* *.*.*.service..*.insert*(..)) || execution(* *.*.*.service..*.update*(..)) "
+ "|| execution(* *.*.*.service..*.remove*(..))"
+ "|| execution(* *.*.*.service..*.delete*(..))")
public void insertPointcut() {
}
可以在@Pointcut定义下面的这个函数里写上要处理的代码,也可以进行更多更多大的扩展,我的项目里就是做了扩展处理,在上面这个函数里没添加任何方法处理,而是在后面扩展,也就是所谓的Advice吧,请看下一步
第五:>>Advice扩展处理
@AfterReturning("insertPointcut()")
public void insertLogInfo(JoinPoint joinPoint)
throws Exception{
/*处理代码,略*/
}
=====================================
好了,完成了,是不是很容易.在第五步的这个方法里有一个参数,这个参数也许就是切面自己传进来的,所以你就这样写吧,JoinPoint 对象里可以获取切面切点的相关信息,如方法名,参数,类路径,类名等等,这样我们就可以来记录操作者进行的操作的详细信息,比如执行的方法名,其所在的对象类名,操作方法里带的所有参数信息,等,再加上自己另外获取一些信息,比如,当前操作时间,操作用户,还可以根据以上信息来定义操作类别等等
本文里源码下载,只是关键的一个spring配置文件和那个bean,其它的文件没上传上来.转载者请将附件上传到你的服务器上http://www.busfly.cn/post/spring-aop-aspectj-advice-log.html
相关文章推荐
- spring aop 面向切面编程 如何来做一个强大的日志记录功能
- springAOP面向切面编程之日志记录功能
- 从壹开始前后端分离【 .NET Core2.0 Api + Vue 2.0 + AOP + 分布式】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
- 使用Aop面向切面技术实现记录详细操作日志功能
- Python实现日志自动记录功能(一个思路代码,详细可以自己扩展)
- SPRING AOP 面向切面编程 基本配置和注解配置 火推
- 扔掉log4j、log4j2,自己动手实现一个多功能日志记录框架,包含文件,数据库日志写入,实测5W+/秒日志文件写入,2W+/秒数据库日志写入,虽然它现在还没有logback那么强大
- Spring AOP 面向切面编程
- 面向切面记录log4j日志
- 请问:如何实现文件日志功能?要求每天换一个文件。文件名以日期区分
- 如何开启tomcat的本地日志记录功能
- IT SpringAOP:足迹第十八步了解SpringAOP(如何使用面向切面开发权限认证、日志、事物)
- 一个简单、漂亮、功能强大的Android日志程序:logger
- apache 访问日志如何设置每日新增一个日志文件、如何限制大小、设置记录内容
- 如何在一个工程里面实现不同的功能打入不同的日志文件中【log4net】
- 一个简单、漂亮、功能强大的Android日志程序:logger
- spring aop 实现用户操作日志记录功能(转)
- 一个简单、漂亮、功能强大的Android日志程序:logger
- 面向切面日志记录
- [原创]自己写的一个简单的程序日志记录类