1.自定义

package cc.mrbird.common.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default "";
}

2.实现类

package cc.mrbird.common.aspect;

import cc.mrbird.common.config.FebsProperties;
import cc.mrbird.common.util.HttpContextUtils;
import cc.mrbird.common.util.IPUtils;
import cc.mrbird.system.domain.SysLog;
import cc.mrbird.system.domain.User;
import cc.mrbird.system.service.LogService;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.apache.shiro.SecurityUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /**
* AOP 记录用户操作日志
*
* @author MrBird
* @link https://mrbird.cc/Spring-Boot-AOP%20log.html
*/
@Aspect
@Component
public class LogAspect { private Logger log = LoggerFactory.getLogger(this.getClass()); @Autowired
private FebsProperties febsProperties; @Autowired
private LogService logService; @Pointcut("@annotation(cc.mrbird.common.annotation.Log)")
public void pointcut() {
// do nothing
} @Around("pointcut()")
public Object around(ProceedingJoinPoint point) throws JsonProcessingException {
Object result = null;
long beginTime = System.currentTimeMillis();
try {
// 执行方法
result = point.proceed();
} catch (Throwable e) {
log.error(e.getMessage());
}
// 获取request
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
// 设置IP地址
String ip = IPUtils.getIpAddr(request);
// 执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
if (febsProperties.isOpenAopLog()) {
// 保存日志
User user = (User) SecurityUtils.getSubject().getPrincipal();
SysLog log = new SysLog();
log.setUsername(user.getUsername());
log.setIp(ip);
log.setTime(time);
logService.saveLog(point, log);
}
return result;
}
}

3.引入

    @Log("获取部门信息")
@RequestMapping("dept")
@RequiresPermissions("dept:list")
public String index() {
return "system/dept/dept";
}

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. Fiddler模拟低速网络

    1. 打开 Rules -> Customize Rules,ctrl + F 找 300 2.修改上传.下载速度,保存 ctrl + s 3.启动模拟网络限速 4.想要取消模拟网络限速,取消勾 ...

  2. Git系列②之部署企业级开源仓库gitlab服务器

    Git系列②之部署企业级开源仓库gitlab服务器 上一篇我们介绍了github的常见使用方法,下面开始部署本地开源仓库gitlab GitLab 是一个用于仓库管理系统的开源项目. 1.安装配置gi ...

  3. 51nod--1459 迷宫游戏 (dijkstra)

    1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可 ...

  4. linux进程内存布局

      一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分 ...

  5. linux命令排序

    sort -k1 -n 第一列按数字正排序 sort -K1 -rn 第一列按数字倒排序

  6. mybatis 按in 函数参数顺序排序

    使用 FIELD()函数 SELECT *  FROM   user  WHERE id IN (72, 80, 69)  ORDER BY FIELD(id, 72, 80, 69)

  7. 【Java】「深入理解Java虚拟机」学习笔记(4)- 类文件结构

    我为什么喜欢Java,另一个重要原因就是跨平台,WORA. 程序员是爽了,但肯定有人要为你遮风挡雨,解决WORA的基石就是字节码+虚拟机. ♣Tip 其实这里存在两种无关性,一是平台无关性.另一个是语 ...

  8. 【ES】学习9-聚合2

    按时间统计:date_histogram GET /cars/transactions/_search { , "aggs": { "sales": { &qu ...

  9. C#关于线程的问题

    1.通过System.threading.Thread类可以创建新的线程,并在线程堆栈中运行静态和动态的实例,可以通过Thread类的构造方法传递一个无参数,并且不返回的委托, class Progr ...

  10. 利用vue-cli创建新项目

    1.安装vue-cli npm i vue-cli --gd 2.初始化一个项目 vue init webpack test //test 是个项目名称并且配置相应的配置,(测试部份的可以选择no) ...