日志系列---【SpringBoot使用Aop实现格式化日志】
2021/11/16 6:40:59
本文主要是介绍日志系列---【SpringBoot使用Aop实现格式化日志】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.最终实现效果
2.在pom中引入Aop依赖(可以先写个@Aspect注解,如果不报错,说明项目中引入过aop依赖了,不用再重复引入下面的依赖)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
3.这里我项目中用了swagger,为了不重复写注释,我直接用了@ApiOperation注解作为切点,当然,也可以自定义注解,把ApiOperation换成自定义的就行了。
package com.system.annotation.Handler; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Method; @Slf4j @Aspect @Component public class LogHandler { @Pointcut("@annotation(io.swagger.annotations.ApiOperation)") public void webLog() { } @Around("webLog()") public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object result = proceedingJoinPoint.proceed(); //打印出参 log.info("Response Args : {}", result); //执行耗时 log.info("exe-time : {} ms", System.currentTimeMillis() - startTime); log.info("============================================End==================================================="+System.lineSeparator()); return result; } @Before("webLog()") public void doBefore(JoinPoint joinPoint){ ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature(); Method method = methodSignature.getMethod(); ApiOperation annotation = method.getAnnotation(ApiOperation.class); String msg = annotation.value(); log.info(System.lineSeparator()); log.info("============================================Start================================================="); //打印请求的url log.info("URL : {}",request.getRequestURL().toString()); log.info("Description : {}",msg); log.info("HTTP Method : {}",request.getMethod()); log.info("Class Method : {},{}",joinPoint.getSignature().getDeclaringTypeName(),joinPoint.getSignature().getName()); log.info("IP : {}",request.getRemoteAddr()); Object[] args = joinPoint.getArgs(); log.info("Request Args : {}",args); } @After("webLog()") public void doAfter() throws Throwable{ log.info("==========================================Response================================================="); } }
4.自定义注解(可以不自定义,我直接用的ApiOperation)
package com.jiulong.springboot_validator.annotation; import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.METHOD}) @Documented public @interface WebLog { /** * 日志描述信息 * * @return String */ String value() default ""; }
这篇关于日志系列---【SpringBoot使用Aop实现格式化日志】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide
- 2025-01-11不得不了解的高效AI办公工具API
- 2025-01-102025 蛇年,J 人直播带货内容审核团队必备的办公软件有哪 6 款?
- 2025-01-10高效运营背后的支柱:文档管理优化指南
- 2025-01-10年末压力山大?试试优化你的文档管理
- 2025-01-10跨部门协作中的进度追踪重要性解析
- 2025-01-10总结 JavaScript 中的变体函数调用方式
- 2025-01-10HR团队如何通过数据驱动提升管理效率?6个策略
- 2025-01-10WBS实战指南:如何一步步构建高效项目管理框架?