@Slf4j注解

@Slf4j注解
引入 import lombok.extern.slf4j.Slf4j;
  替代 private  final Logger logger = LoggerFactory.getLogger(当前类名.class); 
       只需使用注解@Slf4j;

使用@Slf4j注解需要:
1.Idea添加lombok插件
2.配置Maven依赖
<dependency>

   <groupId>org.projectlombok</groupId>

   <artifactId>lombok</artifactId>

</dependency>

使用@Slf4j例子

import com.could.demo.aop.log.entity.Log;
import com.could.demo.aop.log.service.LogService;
import com.could.demo.aop.log.utils.RequestHolder;
import com.could.demo.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;

/**
 * @author zhao
 * @date 2019-03-27
 */
@Component
@Aspect
@Slf4j
public class LogAspect {

    @Autowired
    LogService logService;

    private ThreadLocal<Long> currentTime = new ThreadLocal<>();

    /**
     * 配置切入点,通用的拦截切面
     */
    @Pointcut("@annotation(com.could.demo.aop.log.Log)")
    public void logPointcut() {
        // 该方法无方法体,主要为了让同类中其他方法使用此切入点
    }

    /**
     * 配置环绕通知,使用在方法logPointcut()上注册的切入点
     *
     * @param joinPoint join point for advice
     */
    @Around("logPointcut()")
    public void logAround(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("@Slf4j注解测试");//2020-03-27 17:05:58.787  INFO 9636 --- [nio-8085-exec-2] com.could.demo.aop.log.aspect.LogAspect  : @Slf4j注解测试
        currentTime.set(System.currentTimeMillis());
        joinPoint.proceed();
        Log log1 = new Log(1, System.currentTimeMillis() - currentTime.get());
        HttpServletRequest request = RequestHolder.getHttpServletRequest();
        //getRequestURL() 请求的是不带参数的完整路径 :http://localhost:8083/Aop/getUserDetails/45
        logService.save(getUsername(), request.getRequestURL().toString(), joinPoint, log1);
        currentTime.remove();
    }

    /**
     * 配置异常通知
     *
     * @param joinPoint join point for advice
     * @param e exception
     */
    @AfterThrowing(pointcut = "logPointcut()", throwing = "e")
    public void logAfterThrowing(JoinPoint joinPoint, Throwable e) {
        Log logError = new Log(0,System.currentTimeMillis() - currentTime.get());
        currentTime.remove();
        logError.setExceptionDetail(Arrays.toString(e.getStackTrace()).getBytes());
        HttpServletRequest request = RequestHolder.getHttpServletRequest();
        logService.save(getUsername(),request.getRequestURL().toString(),(ProceedingJoinPoint)joinPoint, logError);
    }

    /**
     * 获取的的当前登录用户名
     * @return
     */
    public String getUsername() {
        /**
         * 获取Security 中的用户名
         * obj = getUserDetails();
         * return new JSONObject(obj).get("username", String.class);
         */
         /**
         * 获取session中的用户名
         */
        Object user1 = RequestHolder.getHttpServletRequest().getSession().getAttribute("user");
        if(user1!=null){
            User user = (User)user1 ;
            return user.getName();
        }
       return "";
    }
}

打印:

2020-03-27 17:05:58.787  INFO 9636 --- [nio-8085-exec-2] com.could.demo.aop.log.aspect.LogAspect  : @Slf4j注解测试
posted @ 2020-03-27 17:16  Angry-rookie  阅读(390)  评论(0)    收藏  举报