1.自定义

  1. package cc.mrbird.common.annotation;
  2.  
  3. import java.lang.annotation.ElementType;
  4. import java.lang.annotation.Retention;
  5. import java.lang.annotation.RetentionPolicy;
  6. import java.lang.annotation.Target;
  7.  
  8. @Target(ElementType.METHOD)
  9. @Retention(RetentionPolicy.RUNTIME)
  10. public @interface Log {
  11. String value() default "";
  12. }

2.实现类

  1. package cc.mrbird.common.aspect;
  2.  
  3. import cc.mrbird.common.config.FebsProperties;
  4. import cc.mrbird.common.util.HttpContextUtils;
  5. import cc.mrbird.common.util.IPUtils;
  6. import cc.mrbird.system.domain.SysLog;
  7. import cc.mrbird.system.domain.User;
  8. import cc.mrbird.system.service.LogService;
  9. import com.fasterxml.jackson.core.JsonProcessingException;
  10. import org.apache.shiro.SecurityUtils;
  11. import org.aspectj.lang.ProceedingJoinPoint;
  12. import org.aspectj.lang.annotation.Around;
  13. import org.aspectj.lang.annotation.Aspect;
  14. import org.aspectj.lang.annotation.Pointcut;
  15. import org.slf4j.Logger;
  16. import org.slf4j.LoggerFactory;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.stereotype.Component;
  19.  
  20. import javax.servlet.http.HttpServletRequest;
  21.  
  22. /**
  23. * AOP 记录用户操作日志
  24. *
  25. * @author MrBird
  26. * @link https://mrbird.cc/Spring-Boot-AOP%20log.html
  27. */
  28. @Aspect
  29. @Component
  30. public class LogAspect {
  31.  
  32. private Logger log = LoggerFactory.getLogger(this.getClass());
  33.  
  34. @Autowired
  35. private FebsProperties febsProperties;
  36.  
  37. @Autowired
  38. private LogService logService;
  39.  
  40. @Pointcut("@annotation(cc.mrbird.common.annotation.Log)")
  41. public void pointcut() {
  42. // do nothing
  43. }
  44.  
  45. @Around("pointcut()")
  46. public Object around(ProceedingJoinPoint point) throws JsonProcessingException {
  47. Object result = null;
  48. long beginTime = System.currentTimeMillis();
  49. try {
  50. // 执行方法
  51. result = point.proceed();
  52. } catch (Throwable e) {
  53. log.error(e.getMessage());
  54. }
  55. // 获取request
  56. HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
  57. // 设置IP地址
  58. String ip = IPUtils.getIpAddr(request);
  59. // 执行时长(毫秒)
  60. long time = System.currentTimeMillis() - beginTime;
  61. if (febsProperties.isOpenAopLog()) {
  62. // 保存日志
  63. User user = (User) SecurityUtils.getSubject().getPrincipal();
  64. SysLog log = new SysLog();
  65. log.setUsername(user.getUsername());
  66. log.setIp(ip);
  67. log.setTime(time);
  68. logService.saveLog(point, log);
  69. }
  70. return result;
  71. }
  72. }

3.引入

  1. @Log("获取部门信息")
  2. @RequestMapping("dept")
  3. @RequiresPermissions("dept:list")
  4. public String index() {
  5. return "system/dept/dept";
  6. }

aop日志记录的更多相关文章

  1. 谈下spring下的 aop日志记录

    在我们开发当中  我们需要对系统用户行为和 系统异常信息有个统一记录  以便后期的 用户行为分析和bug修复   当我们有这个需求时  我们的通常采取方式很多 1.比如我们定义一个规范 开发一个接口 ...

  2. 接口日志记录AOP实现-LogAspect

    使用spring aop日志记录 所需jar包 pom.xml <!-- logger begin --> <dependency> <groupId>org.sl ...

  3. 利用AOP与ToStringBuilder简化日志记录

    刚学spring的时候书上就强调spring的核心就是ioc和aop blablabla...... IOC到处都能看到...AOP么刚开始接触的时候使用在声明式事务上面..当时书上还提到一个用到ao ...

  4. java使用动态代理来实现AOP(日志记录)

    以下内容为原创,转载时请注明链接地址:http://www.cnblogs.com/tiantianbyconan/p/3336627.html AOP(面向方面)的思想,就是把项目共同的那部分功能分 ...

  5. Spring AOP 完成日志记录

    Spring AOP 完成日志记录 http://hotstrong.iteye.com/blog/1330046

  6. Spring AOP进行日志记录

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

  7. Spring AOP进行日志记录,管理

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

  8. 采用Spring AOP+Log4j记录项目日志

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6567672.html 项目日志记录是项目开发.运营必不可少的内容,有了它可以对系统有整体的把控,出现任何问题 ...

  9. 来一手 AOP 注解方式进行日志记录

    系统日志对于定位/排查问题的重要性不言而喻,相信许多开发和运维都深有体会. 通过日志追踪代码运行状况,模拟系统执行情况,并迅速定位代码/部署环境问题. 系统日志同样也是数据统计/建模的重要依据,通过分 ...

随机推荐

  1. 添加struts2本地dtd限制

    将源码保重的struts-2.1.7.dtd文件拷贝到dtds文件夹中 打开eclipse配置文件window/preferences,搜索xml找到XML Catalog

  2. windows 中java开发环境搭建

    安装jdk1.6 1.下载tomcat服务器 2. 解压缩tomcat  * 不要使用含有空格和中文目录 3.启动tomcat之前 配置 JAVA_HOME 环境变量 ------ 配置JDK安装路径 ...

  3. MySQL数据库的一些方法使用

    substring_index(windSpeed,)/3.6 as windSpeed 可将 .8公里.0m/s 进行拆分 嵌套使用replace方法 replace( replace( repla ...

  4. UVA 1395 MST

    给你一个图, 求一个生成树, 边权Max – Min 要最小,输出最小值, 不能构成生成树的 输出 -1: 思路: Keuksal 算法, 先排序边, 然后枚举 第一条边, 往后加入边, 直到有 n- ...

  5. 【原创】大数据基础之Airflow(2)生产环境部署airflow研究

    一 官方 airflow官方分布式部署结构图 airflow进程 webserver scheduler flower(非必须) worker airflow缺点 scheduler单点 通过在sch ...

  6. [加密算法]为什么说RSA难以被破解

    RSA算法运用了数学“两个大的质数相乘,难以在短时间内将其因式分解”的这么一套看似简单事实上真的是很困难的一个数学难题...... 以前也接触过RSA加密算法,感觉这个东西太神秘了,是数学家的事,和我 ...

  7. 大数据python词频统计之本地分发-file

    统计某几个词在文章出现的次数 -file参数分发,是从客户端分发到各个执行mapreduce端的机器上 1.找一篇文章The_Man_of_Property.txt如下: He was proud o ...

  8. (转)整理 node-sass 安装失败的原因及解决办法

    转载地址:https://segmentfault.com/a/1190000010984731

  9. Modbus库开发笔记之四:Modbus TCP Client开发

    这一次我们封装Modbus TCP Client应用.同样的我们也不是做具体的应用,而是实现TCP客户端的基本功能.我们将TCP客户端的功能封装为函数,以便在开发具体应用时调用. 对于TCP客户端我们 ...

  10. phpstudy添加redis扩展

    操作系统   windows: 直接贴步骤记录下 一.      划重点,运行phpinfo(), 观察第四行 x86  好了记住这个 x86 三.    http://pecl.php.net/pa ...