一、引入jar包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
实现操作日志记录的功能,无非就是监控用户调用了哪些方法。AOP是一个不错的选择,接下来介绍一下,AOP怎么对每个方法都实施切面。

1.自定义注解

/**
* 自定义Log注解 用于切面标识
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default "";
}
2.将需要切面的 方法 都标注 该注解@Log

@Log("删除用户")
@RequestMapping(value = "deleteAccount.do", method = RequestMethod.POST)
@ResponseBody
public Map deleteAccounnt(Integer id) {
Integer deleteAccount = loginService.deleteAccount(id);
if (deleteAccount > 0) {
resultMap.put("status", "200");
resultMap.put("message", "账号 删除成功");
} else {
resultMap.put("status", "500");
resultMap.put("message", "账号 删除失败");
}
return resultMap;
}
3.将有Log标识的方法进行切面

@Component
@Aspect
public class LogAspect {

@Autowired
LoginlogService loginlogService;

@Pointcut("@annotation(Log)") //将Log标识的方法进行切面
public void logAsppect3() {
}

@AfterReturning("logAsppect3()")
public void logAsppect(JoinPoint jp) throws Throwable {

try {

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
HttpSession session = request.getSession(true);
String email = (String) session.getAttribute("email");

//JoinPoint 对象可以获取目标业务方法的详细信息:方法签名,调用参数
Signature m = jp.getSignature();
//方法名
String methodName = m.getName();
MethodSignature signature = (MethodSignature) jp.getSignature();
Method method = signature.getMethod();
Log log = method.getAnnotation(Log.class);
System.out.println("Log Value:" + log.value());//输出注解里面的值
System.out.println("操作人 :" + email + "正在执行方法 :" + methodName);

}

} catch (Exception e) {

e.printStackTrace();
}

}

}
4.这样就可以 对所有@Log标识的方法进行切面,调用某个方法 也会在控制台输出,达到操作日志记录的效果
原文:https://blog.csdn.net/Joe_Wang1/article/details/82378576

springboot使用aop做日志的更多相关文章

  1. SpringBoot 配置 AOP 打印日志

    在项目开发中,日志系统是必不可少的,用AOP在Web的请求做入参和出参的参数打印,同时对异常进行日志打印,避免重复的手写日志,完整案例见文末源码. 一.Spring AOP AOP(Aspect-Or ...

  2. 【Java分享客栈】超简洁SpringBoot使用AOP统一日志管理-纯干货干到便秘

    前言 请问今天您便秘了吗?程序员坐久了真的会便秘哦,如果偶然点进了这篇小干货,就麻烦您喝杯水然后去趟厕所一边用左手托起对准嘘嘘,一边用右手滑动手机看完本篇吧. 实现 本篇AOP统一日志管理写法来源于国 ...

  3. springboot集成AOP管理日志

    如何将所有的通过url的请求参数以及返回结果都输出到日志中? 如果在controller的类中每个方法名都写一个log输出肯定是不明智的选择. 使用spring的AOP功能即可完成. 1. 在pom. ...

  4. 在SpringBoot中用SpringAOP实现日志记录功能

    背景: 我需要在一个SpringBoot的项目中的每个controller加入一个日志记录,记录关于请求的一些信息. 代码类似于: logger.info(request.getRequestUrl( ...

  5. Springboot的日志管理&Springboot整合Junit测试&Springboot中AOP的使用

    ==============Springboot的日志管理============= springboot无需引入日志的包,springboot默认已经依赖了slf4j.logback.log4j等日 ...

  6. SpringBoot学习笔记(七):SpringBoot使用AOP统一处理请求日志、SpringBoot定时任务@Scheduled、SpringBoot异步调用Async、自定义参数

    SpringBoot使用AOP统一处理请求日志 这里就提到了我们Spring当中的AOP,也就是面向切面编程,今天我们使用AOP去对我们的所有请求进行一个统一处理.首先在pom.xml中引入我们需要的 ...

  7. 记一次基于springboot+aop实现日志记录实战

    1. 为什么要记录日志 好处: a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的. b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志.有了日志 ...

  8. springboot集成aop日志

    日常开发中假如是前后端完全分离,我们会习惯用浏览器去调用controller的接口来测试.这一个过程普通的日志功能会记录sql参数等一些基本信息.但是假如项目越来越庞大,我们的包越来越多,在维护项目和 ...

  9. Spring全家桶系列–SpringBoot之AOP详解

    //本文作者:cuifuan //本文将收录到菜单栏:<Spring全家桶>专栏中 面向方面编程(AOP)通过提供另一种思考程序结构的方式来补充面向对象编程(OOP). OOP中模块化的关 ...

随机推荐

  1. JVM常用参数(内存分配 内存回收日志)

    内存监控  -verbose:gc 测试代码 public static void main(String[] args){ List<Classes> classes=new Array ...

  2. [bzoj1218][HNOI2003]激光炸弹_暴力

    激光炸弹 bzoj-1218 HNOI-2003 题目大意:在笛卡尔坐标系上有n个点,问一个平行于坐标轴的r*r的正方形可以最多覆盖多少个目标. 注释:$1\le n \le 10000$,$1\le ...

  3. hdu5326 Work

    题目链接:点击打开链接 题目大意:有n个人.各自管理不同的人,问有多少人管理k个人. 思路:先记录每一个人的直接上级.然后模拟路径压缩的过程进行计数求和. #include<stdio.h> ...

  4. BNU 34986 Football on Table

    "Bored? Let's play table football!" The table football is played on a rectangular table, u ...

  5. 用Java做的类似皇家守卫战的游戏

    最近因为数据结构的课设缘故,所以用Java做了一款类似皇家守卫战(本人最钟情的一款PC兼手游的塔防游戏)的游戏.现在把这个游戏放出来,可以下载下来 玩耍 学习,代码中我也做了大量的注释.(运行游戏得带 ...

  6. 11gR2 Database Services for &quot;Policy&quot; and &quot;Administrator&quot; Managed Databases (文档 ID 1481647.1)

    In this Document   Purpose   _afrLoop=1459311711568804&id=1481647.1&displayIndex=6&_afrW ...

  7. layer获取弹出frame层数据

    通常,弹出层关闭之前,需要将部分数据传入父页面.这个时候怎么办呢? 通过success获取frame层的index. 然后通过cancel事件,获取子页面数据. 拿获取高德地图坐标为例: // 显示地 ...

  8. PHP中数据类型转换的三种方式

    PHP中数据类型转换的三种方式 PHP的数据类型转换属于强制转换,允许转换的PHP数据类型有: 1.(int).(integer):转换成整形2.(float).(double).(real):转换成 ...

  9. oracle表类似:BIN$dJ5h8mA4Lr/gQAB/AQB0oA==$0 TABLE

    今天看到数据库中有很多类似: TNAME                          TABTYPE  CLUSTERID ------------------------------ ---- ...

  10. 关于H5优化的一些问题

    required修改默认提示  : <form action="abc.php"> <input type="text" required o ...