SpringBoot AOP处理请求日志打印功能代码实例

网友投稿 387 2022-12-11


SpringBoot AOP处理请求日志打印功能代码实例

设计原则和思路:

http://元注解方式结合AOP,灵活记录操作日志

能够记录详细错误日志为运营以及审计提供支持

日志记录尽可能减少性能影响

操作描述参数支持动态获取,其他参数自动记录。

代码实例如下

@Slf4j

@Aspect

@Configuration

public class RequestAopConfig {

@AutoDxuRCwired

private HttpServletRequest request;

private static final ThreadLocal START_TIME_MILLIS = new ThreadLocal<>();

@Pointcut("execution(* com.xxx.xxx.xxx..*(..)) " +

"&&(@annotation(org.springframework.web.bind.annotation.PostMapping)" +

"||@annotation(org.springframework.web.bind.annotation.GetMapping)" +

"||@annotation(org.springframework.web.bind.annotation.PutMapping)" +

"||@annotation(org.springframework.web.bind.annotation.DeleteMapping))")

public void controllerMethodPointcut() {

}

/**

* 前置通知:在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。

*

* @param joinPoint 参数

*/

@Before("controllerMethodPointcut()")

public void before(JoinPoint joinPoint) {

START_TIME_MILLIS.set(System.currentTimeMillis());

}

/**

* 后置通知:在某连接点正常完成后执行的通知,通常在一个匹配的方法返回的时候执行。

*

* @param joinPoint 参数

*/

@AfterReturning(value = "controllerMethodPointcut()", returning = "result")

public void afterReturning(JoinPoint joinPoint, Object result) {

String logTemplate = "--------------- 执行成功 ---------------\n请求开始---Send Request URL: {}, Method: {}, Params: {} \n请求方法---ClassName: {}, [Method]: {}, execution time: {}ms \n请求结束---Send Response Result: {}";

log.info(logTemplate, request.getRequestURL(), request.getMethod(), jsON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getName(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), JSON.toJSONString(result));

START_TIME_MILLIS.remove();

}

/**

* 异常通知:在方法抛出异常退出时执行的通知。

*

* @param joinPoint 参数

*/

@AfterThrowing(value = "controllerMethodPointcut()", thhttp://rowing = "ex")

public void afterThrowing(JoinPoint joinPoint, Throwable ex) {

String logTemplate = "--------------- 执行失败 ---------------\n异常请求开始---Send Request URL: {}, Method: {}, Params: {} \n异常请求方法---ClassName: {}, [Method]: {}, execution time: {}ms \n异常请求结束---Exception Message: {}";

log.error(logTemplate, request.getRequestURL(), request.getMethod(), JSON.toJSONString(joinPoint.getArgs()), joinPoint.getSignature().getDeclaringTypeName(), joinPoint.getSignature().getNahttp://me(), (System.currentTimeMillis() - START_TIME_MILLIS.get()), ex.getMessage());

START_TIME_MILLIS.remove();

}

/**

* 最终通知。当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。

*

* @param joinPoint

*/

@After("controllerMethodPointcut()")

public void after(JoinPoint joinPoint) {

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot发送邮件功能 验证码5分钟过期
下一篇:SpringBoot2线程池定义使用方法解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~