SpringBoot的统一日志记录

利用Aop拦截所有的Service方法,对执行结果日志进行记录。

package com.ats.dt.advice;
import com.ats.dt.exceptions.HandleException;
import lombok.extern.slf4j.Slf4j;
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.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.CrossOrigin;

import java.util.Arrays;

/**
 * 日志通知
 * */
@Slf4j
@Aspect
@Component
@CrossOrigin
public class CommonLogAdvice {
    /**
     * 所有serviceClass的类的所有public方法
     */
    @Pointcut("execution(public * com.wxl52d41..*ServiceImpl.*(..))")
    public void serviceClass() {
    }
    
    // @Around("within(@org.springframework.stereotype.Service *)") //扫描所有@Service注解的下类中的所有的方法
    @Around("serviceClass()") //扫描所有@Service注解的下类中的所有的方法
    public Object handleExceptionLog(ProceedingJoinPoint jp) throws Throwable {

        try {
            // 记录方法进入日志,Signature包名+类名+方法名。Args方法的所有参数
            log.debug("{}方法准备调用,参数: {}", jp.getSignature(), Arrays.toString(jp.getArgs()));
            long a = System.currentTimeMillis();
            // 调用切点方法(方法执行)
            Object result = jp.proceed();
            // 记录方法结束日志
            log.debug("{}方法调用成功,执行耗时 {} ms", jp.getSignature(), System.currentTimeMillis() - a);
            return result;
        } catch (Throwable throwable) {
            log.error("{}方法执行失败,原因:{}", jp.getSignature(), throwable.getMessage(), throwable);
            // 判断异常是否是HandleException
            if(throwable instanceof HandleException){
                // 如果是,不处理,直接抛
                throw throwable;
            }else{
                // 如果不是,转为HandleException
                throw new HandleException(500, throwable);
            }
        }
    }
}

切点表达式
2、依赖

        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
             <version>1.9.7</version>
        </dependency>

2.注意要开启debug日志模式,否则统一日志不生效

logging.level.com.ats.dt=debug 
logging:
  level:
    XXX.XXX: debug

版权声明:本文为weixin_43811057原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。