Springboot項目使用aop添加日誌

@Aspect
@Component
public class Log {
    private static Logger logger = LogManager.getLogger(Log.class);
    private String method;
    private String ip;
    private int port;
    private String host;
    private String url;

    /**
     * 定義切入點
     */
    @Pointcut("execution(public * com.angin.iit.controller..*.*(..))")
    public void log() {
    }

    /**
     * 執行方法前 獲取client參數
     *
     * @param joinPoint
     */
    @Before("log()")
    public void doBefore(JoinPoint joinPoint) {
        //取到request
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        ip = request.getRemoteAddr();//客戶端ip
        host = request.getRemoteHost();//客戶端主機
        method = request.getMethod();//客戶端請求方法
        port = request.getRemotePort();//客戶端請求port
        url=request.getRequestURL().toString();//請求url
        //記錄client信息
        logger.info("client:ip=" + ip + ";host=" + host + ";method=" + method + ";port=" + port+";url="+url);
        //類名
        String classname = joinPoint.getTarget().getClass().getSimpleName();
        //方法名
        String methodName = joinPoint.getSignature().getName();
        //參數
        List<Object> args = Arrays.asList(joinPoint.getArgs());
        String paraJsonString = JSON.toJSONString(args, SerializerFeature.DisableCircularReferenceDetect);
        //日誌記錄 類 方法 參數
        logger.info("class name: " + classname + ", method name: " + methodName + ";parameters: " + paraJsonString);
    }

    /**
     * 方法執行
     *
     * @param proceedingJoinPoint
     * @return
     * @throws Throwable
     */
    @Around("log()")
    public Object doAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        Object obj = proceedingJoinPoint.proceed();
        logger.info("return:" + obj);
        return obj;
    }

    /**
     * 異常處理
     *
     * @param e
     */
    @AfterThrowing(pointcut = "log()", throwing = "e")
    public void doException(Throwable e) {
        if (e != null) {
            logger.error("doException系統異常:" + e.getMessage(), e);
        }
    }

以前記錄日誌的時候,都是在controller裏 每一個方法中添加,使用aop 節約了不少時間,並且維護起來更方便。url

相關文章
相關標籤/搜索