SpringBoot 中aop整合方法执行日志
今天事情不多, 处理完手中的事边想着捣鼓一下AOP, 着手开始写才发现, 多久不用, 自己已经忘得差不多了, 捣鼓半天之后, 慢慢整出这个小demo,以便于以后查阅回顾
1 .先创建一个注解, 用来作为AOP的切入点
/**
* @author RYH
* @description 日志标注
* @date 2019/10/11
**/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SystemLog {
String value() default "";
}
2 .创建切面类, 以实现切面的通知
/**
* @author RYH
* @description aa
* @date 2019/10/11
**/
@Aspect
@Component
public class AopAspect implements Ordered { // 本地异常日志记录对象
private static final Logger logger = LoggerFactory.getLogger(AopAspect.class); @Pointcut("@annotation(com.ryh.qtalk.annotation.SystemLog)")
public void methodPointCut() {
} @Before("methodPointCut()")
public void beforeCut(JoinPoint point) {
String name = point.getSignature().getName();
logger.info("方法 {} 执行开始...............",name);
} @Around("methodPointCut()")
public Object printLog(ProceedingJoinPoint point) {
String name = point.getSignature().getName();
try { Class targetClass = point.getTarget().getClass();
Method[] methods = targetClass.getMethods();
for (int i = 0; i < methods.length; i++) {
if (name.equals(methods[i].getName())) {
SystemLog annotation = methods[i].getAnnotation(SystemLog.class);
if (annotation != null) {
String value = annotation.value();
logger.info("SystemLog的值为:{}", value);
}
}
} long begin = System.currentTimeMillis();
Object proceed = point.proceed();
long end = System.currentTimeMillis();
long time = end - begin;
logger.info("执行{}方法成功, 执行时长{} ms", name, time);
return proceed;
} catch (Throwable e) {
logger.error(e.getMessage(), e);
}
return new Object();
} @Override
public int getOrder() {
return 1;
}
}
这里定义的切点是放在注解上, 这样就只需要在要用到的接口方法上加上注解就行. 当然, 像是全局需要处理的, 就可以直接将切面放在controller,层或者service层, 在pointCut("execution(* com.ryh.qtalk.controller.*)")就行
我这里只是为了试验,只用到了前置通知(@before)和环绕通知(@around) 其他的也还有后置通知(@after), 然后再在需要通知切入的方法上加上注解@SystemLog就行
@SystemLog("hello")
@RequestMapping("hello")
public String hello() {
List<User> users = userDao.selectList(null);
System.out.println(users);
return "hello World";
}
然后浏览器中访问这个controller的方法, 系统就会进入切面打印日志
这样一个初步的系统日志demo就搭建完成了, 想要别的功能也可以在里面进行添加.
SpringBoot 中aop整合方法执行日志的更多相关文章
- Springboot中AOP统一处理请求日志
完善上面的代码: 现在把输出信息由先前的system.out.println()方式改为由日志输出(日志输出的信息更全面) 现在在日志中输出http请求的内容 在日志中获取方法返回的内容
- Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用
==============Springboot的日志管理============= springboot无需引入日志的包,springboot默认已经依赖了slf4j.logback.log4j等日 ...
- SpringBoot学习笔记(七):SpringBoot使用AOP统一处理请求日志、SpringBoot定时任务@Scheduled、SpringBoot异步调用Async、自定义参数
SpringBoot使用AOP统一处理请求日志 这里就提到了我们Spring当中的AOP,也就是面向切面编程,今天我们使用AOP去对我们的所有请求进行一个统一处理.首先在pom.xml中引入我们需要的 ...
- springboot中使用mybatis显示执行sql
springboot 中使用mybatis显示执行sql的配置,在properties中添加如下 logging.你的包名=debug 2018-11-27 16:35:43.044 [DubboSe ...
- Springboot 中AOP的使用
面向切面编程(Aspect Oriented Programming) 是软件编程思想发展到一定阶段的产物,是面向对象编程的有益补充.AOP一般适用于具有横切逻辑的场合,如访问控制.事务管理.性能检测 ...
- SpringBoot 使用AOP记录接口访问日志
文章来源:https://macrozheng.github.io/mall-learning/#/technology/aop_log AOP AOP为Aspect Oriented Program ...
- springboot中aop的使用
Spring AOP(Aspect Oriented Programming),即面向切面编程,是OOP(Object Oriented Programming,面向对象编程)的补充和完善. OOP引 ...
- Java多线程开发系列之五:Springboot 中异步请求方法的使用
Springboot 中异步线程的使用在过往的后台开发中,我们往往使用java自带的线程或线程池,来进行异步的调用.这对于效果来说没什么,甚至可以让开发人员对底层的状况更清晰,但是对于代码的易读性和可 ...
- MVC AjaxOptions 中的OnSuccess方法执行多次的问题
原因是单个页面嵌套多个部分视图,而多个视图中有多个表单提交但是Onsuccess方法的函数名是一样的. 例如主页面的Onsuccess方法叫success 点击部分视图后js文件又含有一个succes ...
随机推荐
- JAVA踩坑录
以前踩了很多坑,大多忘了.现在踩了坑,想起了一定记下来. 1. 字符串分割,这种工具类,首次使用一定要先看一眼,不然跳坑 commons-lang StringUtils.split分割时会去掉空串: ...
- android设置gps自动开启
1.第一种方法 private void toggleGPS() { Intent gpsIntent = new Intent(); gpsIntent.setClassName("com ...
- spring常用模式--模板模式
引入:这几天在看一本讲spring源码的书<SPRING技术内幕>里面在讲加载配置文件的时候,可以有不同的加载方式,如根据文件系统目录加载配置文件(FileSystemXmlApplica ...
- scikit-learn机器学习(三)多项式回归(二阶,三阶,九阶)
我们仍然使用披萨直径的价格的数据 import matplotlib matplotlib.rcParams['font.sans-serif']=[u'simHei'] matplotlib.rcP ...
- 一个数独引发的惨案:零知识证明(Zero-Knowledge Proof)
导言:原文的作者是著名的Ghost和Spectre 这两个协议的创始团队的领队Aviv Zohar.原文作者说他的这篇原文又是引用了以下这两篇学术论文: How to Explain Zero Kno ...
- redis管理工具rdm安装;另一个管理工具medis
安装: brew cask install rdm 开源安装 http://docs.redisdesktop.com/en/latest/install/ 说明 直接从官网下载也可以,不过是收费的 ...
- JAVA数据结构和算法 6 递归
递归:直接或者间接地调用自己.比如计算连续数的阶乘,计算规律:n!=(n-1)!*n. 每个递归方法都有一个基值(终止)条件,以防止无线地递归下去,以及由此引发的程序崩溃. 采用递归是因为它可以从概念 ...
- mysql5.6.36 编译报错make[1]: *** [storage/perfschema/unittest/CMakeFiles/pfs_connect_attr-t.dir/all]..
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysqldb -DMYSQL_UNIX_ADDR=/tmp/m ...
- 跨服务器执行SQL
--exec sp_helpserver 可以以存储过程形式执行以下: --1.1 创建登录信息(或叫创建链接服务器登录名映射)(只需选择一种方式) --1.1.1 以windows认证的方式登录 / ...
- Git速成学习第五课:分支管理策略
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...