AOP实现业务日志及异常日志记录

Posted 一味苦茶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AOP实现业务日志及异常日志记录相关的知识,希望对你有一定的参考价值。

  服务对外提供接口,若没有日志记录,出问题时,无法确认调用方还是系统内部造成的异常。那么日志记录便排上了用场,但是每个方法都记录调用参数,记录返回结果,若多人开发,日志记录不规范等等问题便闹人心。于是,结合AOP,完美解决该问题

 

@Component

@Aspect

public class ControllerAOP extends ServiceResource {

 

   @Pointcut("execution(* com.ywkc.gcs.resource..*.*(..))")

   public void pointcutResult() {

   }

 

   @Around("pointcutResult()")

   public Object handlerControllerMethod(ProceedingJoinPoint joinPoint) {

        Object result = null;

        String className =joinPoint.getTarget().getClass().getSimpleName();

        String methodName = className + "_" +getMethodName(joinPoint);

        try {

            LoggerUtil.error("method:"+ methodName + " params:" + Arrays.asList(joinPoint.getArgs()));

            result = joinPoint.proceed();

            LoggerUtil.error("method:"+ methodName + " result:" + result);

        } catch (Throwable e) {

            LoggerUtil.error("method:"+ methodName + " error:" + e);

            return packageResult(500, "系统异常,请联系管理员", "");

        }

        return result;

   }

 

   private String getMethodName(ProceedingJoinPoint joinPoint) {

        Signature signature =joinPoint.getSignature();

        MethodSignature methodSignature =(MethodSignature) signature;

        Method method = methodSignature.getMethod();

        return method.getName();

   }

 

}

注:com.ywkc.gcs.resource包下皆为对外提供的resf接口类

 

spring文件中注册

   <context:component-scan base-package="com.ywkc.gcs" />

   <aop:aspectj-autoproxy/>

<aop:aspectj-autoproxy proxy-target-class="true" />

 


LoggerUtil.error为简化日志记录,避免每个类都定义

privatefinalstatic Logger logger = LoggerFactory.getLogger(App.class);

logger.error("日志记录");

 

LoggerUtil工具类代码如下

 

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

 

public class LoggerUtil {

 

   public static Logger getProvate() {

        return LoggerFactory.getLogger(newException().getStackTrace()[1].getClassName());

   }

 

   public static void info(String msg) {

        getProvate().info(msg);

   }

   

   public static void error(String msg) {

        getProvate().error(msg);

   }

}

以上是关于AOP实现业务日志及异常日志记录的主要内容,如果未能解决你的问题,请参考以下文章

Spring Aop基于注解的实现

SpringBoot使用AOP记录请求日志和异常日志

spring ioc的详解?

面向切面编程 AOP 和装饰器??

自定义日志注解 + AOP实现记录操作日志

Spring AOP 注解形式