0
点赞
收藏
分享

微信扫一扫

老鸟是这样实现springboot日志打印的~



文章目录

  • 前言
  • 一、实现一个全局日志打印
  • 二、使用步骤
  • 1. 新增一个自定义注解
  • 2. 拦截注解,并实现相应的打印日志功能
  • 3. 使用
  • 总结


前言

项目中有时候为了与前端,与后端(微服务/远程调用http) 等撕逼,我们不得不做好应对措施,最终的就是打印清晰我们的入参出参日志,这为以后撕逼,查找问题,快速定位bug,都会非常有利;

一、实现一个全局日志打印

每个方法,请求,自己打印入参,出参,当然不行了,太复杂了,有一天让你改下打印风格,那岂不是要全都改一遍,又或者加一下每个请求的处理时长,那岂不是要累死~,为了一劳永逸,我们就用自定义注解实现吧!

二、使用步骤

1. 新增一个自定义注解

/**
 * 打印日志 出参入参
 *
 * @author fulin
 * @since 2023/6/16 10:54
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface CustomizationLog {}

2. 拦截注解,并实现相应的打印日志功能

  • 这里我们采用StopWatch 来统计接口处理耗时
  • 利用@Around 环绕通知,打印入参,以及处理之后的回参

/**
 * 日志拦截打印实现类
 *
 * @author fulin
 * @since 2023/6/16 10:56
 */
@Aspect
@Component
@Slf4j
public class CustomLogAspect {

    /**
     * 日志拦截打印实现类
     *
     * @param jp ProceedingJoinPoint
     * @return 返回参数
     */
    @Around(value = "@annotation(CustomizationLog)")
    @SneakyThrows
    public Object aroundLog(ProceedingJoinPoint jp) {
        Signature signature = jp.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();
        // 获取请求参数
        Object[] args = jp.getArgs();
        String[] parameterNames = new DefaultParameterNameDiscoverer().getParameterNames(method);
        HashMap<Object, Object> map = MapUtil.newHashMap();
        if (ArrayUtil.isNotEmpty(args)) {
            for (int i = 0; i < args.length; i++) {
                assert parameterNames != null;
                map.put(parameterNames[i], args[i]);
            }
        }
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        String name = method.getName();
        LOG.info("拦截的方法:{}, 入参: {}", name, JSON.toJSONString(map));
        Object proceed = jp.proceed();
        LOG.info("拦截的方法:{}, 返参: {}", name, JSON.toJSONString(proceed));
        stopWatch.stop();
        LOG.info("{}方法 执行时长: {}ms", name, stopWatch.getLastTaskTimeMillis());
        return proceed;
    }
}

3. 使用

  • 加在控制器的请求上
  • 老鸟是这样实现springboot日志打印的~_java

  • 加载实现类的方法上
  • 老鸟是这样实现springboot日志打印的~_spring boot_02

打印效果如下

老鸟是这样实现springboot日志打印的~_自定义注解_03

总结

虽不复杂,但是在实际项目中应用的话,还是很称心如意的~,而且在此基础上,还能根据自己的需要扩展就好了;


举报

相关推荐

0 条评论