springboot aop记录日志
一,添加依赖
二,编写切面类
/*** @program: beidou* @description: 记录必要请求日志* @author: shengkai* @create: 2018-08-23 15:31**/ @Aspect @Component @Order(-5) public class WebLogAspect {private final Logger log = LoggerFactory.getLogger(WebLogAspect.class);private static ThreadLocal<Long> time = new ThreadLocal<Long>(){protected Long initialValue() {long beginTime = System.currentTimeMillis();return beginTime;}};//直接注入会有空指针问题private static final ThreadLocal<InvokeLog> invokelog = new ThreadLocal<InvokeLog>(){protected InvokeLog initialValue() {return new InvokeLog();}};@AutowiredInvokeLogMapper invokeLogMapper;public WebLogAspect() {}/*** 定义一个切入点.* 解释下:* ~ 第一个 * 代表任意修饰符及任意返回值.* ~ 第二个 * 任意包名* ~ 第三个 * 代表任意方法.* ~ 第四个 * 定义在web包或者子包* ~ 第五个 * 任意方法* ~ .. 匹配任意数量的参数.*/@Pointcut("@annotation(com.kuainiu.beidou.service.base.components.InvokeLog)")public void invokeLog(){invokelog.set(new InvokeLog());}@Before(value = "invokeLog()")public void doBefore(JoinPoint joinPoint) throws Throwable {time.set(System.currentTimeMillis());// 接收到请求,记录请求内容ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();// 记录下请求内容log.info("URL : " + request.getRequestURL().toString());log.info("HTTP_METHOD : " + request.getMethod());log.info("IP : " + request.getRemoteAddr());log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());log.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));InvokeLog invokeLog = invokelog.get();invokeLog.setCreateTime(new Date());invokeLog.setUrl(request.getRequestURL().toString());invokeLog.setHttpMethod(request.getMethod());invokeLog.setIp(request.getRemoteAddr());invokeLog.setClassMethod(joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());invokeLog.setArgs(Arrays.toString(joinPoint.getArgs()));}@AfterReturning(returning = "ret", pointcut = "invokeLog()")public void doAfterReturning(Object ret) throws Throwable {// 处理完请求,返回内容log.info("RESPONSE : " + ret);InvokeLog invokeLog = invokelog.get();invokeLog.setResponse(ret.toString());invokeLog.setTime((System.currentTimeMillis()-time.get()));invokeLogMapper.insert(invokeLog);}@After(value = "invokeLog()")public void after(){} }
/*** @program: beidou* @description: 注解文件* @author: shengkai* @create: 2018-08-24 08:59**/
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface InvokeLog {String name() default "";String description() default "";boolean printReturn() default true;
}
转载于:https://www.cnblogs.com/shengkai126126/p/10986587.html
springboot aop记录日志相关推荐
- 基于SpringBoot的AOP记录日志
基于SpringBoot的AOP记录日志 package com.pgeneral.dlabs.sop.aop;import java.lang.annotation.*;/*** @author Y ...
- 如何使用SpringBoot AOP 记录操作日志、异常日志?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:咫尺的梦想_w cnblogs.com/wm-dv/ ...
- SpringBoot+AOP实现多数据源动态切换
SpringBoot+AOP实现多数据源动态切换 背景 设计总体思路 步骤 背景 系统后端需要访问多个数据库,现有的数据库连接配置写入配置文件中.后端需要从一个数据库的配置表里动态的读取其它mysql ...
- SpringBoot + AOP 统一处理日志
Springboot + AOP 统一处理日志.然后系统日志持久化到文件保存起来,当程序方便发生问题的时候,能够快速.准确的定位到问题的所在.SpringBoot + Log4j 每天输出一个日志文件 ...
- SpringBoot+AOP(@Around)
SpringBoot+AOP(@Around) 虽然SpringBoot很方便,可以使我们不太懂原理的情况下都可以轻松的写出一个CRUD的项目,但是SpringBoot的控制反转和依赖注入我们时时刻刻 ...
- SpringBoot AOP 记录操作日志、异常日志
使用SpringBoot AOP 记录操作日志.异常日志 我们在做项目时经常需要对一些重要功能操作记录日志,方便以后跟踪是谁在操作此功能.在操作某些功能时也有可能会发生异常,但是每次发生异常要定位原因 ...
- springboot aop + logback + 统一异常处理 打印日志
springboot aop + logback + 统一异常处理 打印日志 参考文章: (1)springboot aop + logback + 统一异常处理 打印日志 (2)https://ww ...
- SpringBoot AOP完全讲解二:统一处理请求日志
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80669451 本文出自[赵彦军的博客] 前言 不了解 AOP 概念的同学,请先看 ...
- Spring-Boot + AOP实现多数据源动态切换
2019独角兽企业重金招聘Python工程师标准>>> 最近在做保证金余额查询优化,在项目启动时候需要把余额全量加载到本地缓存,因为需要全量查询所有骑手的保证金余额,为了不影响主数据 ...
最新文章
- 最新OPhone 开发官网
- shell 死循环if判断_运维小技巧(2):shell函数
- 在校生如何快速提升竞争力
- Python 实现杨辉三角
- Go语言字符串和数组的相互转换
- 实例变量和静态变量(或类变量static)
- tomcat出现5个using_当猫咪出现这5个迹象,主人就要给猫咪换猫粮了
- 二十四种设计模式:责任链模式(Chain of Responsibility Pattern)
- 告别ASP.NET操作EXCEL的烦恼(总结篇)
- 储存管理系统c语言,C语言-图书管理系统-未做文件储存系统.docx
- sharepoint 2007,sharepoint 2010网站的备份还原
- 怎么在linux中运行gamess,桌面应用|在 Linux 中怎么运行 MS-DOS 游戏和程序
- 腾讯云学生服务器搭建个人网站——配置web开发环境详细步骤
- html5 span 点击选择,设置span标签不可点击技术分享
- pmap anon 内存泄露
- HP deskjet 2132 如何顺利在mac上使用
- ROSIntegration ROSIntegrationVision与虚幻引擎4(Unreal Engine 4)的配置
- beeline执行sql语句_beeline执行sql脚本我世界开挂
- hanoi塔 python
- 测量结果RSRP/SINR/RSRQ/RSSI