AOP-@Aspect:Controller日志全监控

一、Controller

@Aspect
@Component
public class ControllerMonitor {
    
    

    private static final Logger LOGGER = LoggerFactory.getLogger("CONTROLLER-DETAIL-AOP-LOGGER");

	//*** 替换成路径
    @Around("execution(* com.***.controller.*.*Controller.*(..))")
    public Object aroundServiceAccess(ProceedingJoinPoint joinPoint) throws Throwable {
    
    
        return Util.aopUtil(joinPoint, LOGGER);
    }
}

二、aopUtil

    public static Object aopUtil(ProceedingJoinPoint joinPoint, final Logger logger) throws Throwable {
    
    
        try {
    
    
            JoinPointUtil.logJoinPointBegin(logger, joinPoint, "begin");
            long begin = System.currentTimeMillis();
            Object result = JoinPointUtil.monitorJoinPoint(joinPoint);
            long end = System.currentTimeMillis();
            JoinPointUtil.logJoinPoint(logger, joinPoint, result, "end," + (end - begin) + "ms");
            return result;
        } catch (RuntimeException e) {
    
    
            JoinPointUtil.logJoinPoint(logger, joinPoint, null, "exception", e);
            throw e;
        }
    }

二、JoinPointUtil

public class JoinPointUtil {
    
    

    public static Object monitorJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
    
    
        try {
    
    
            Object result = joinPoint.proceed();
            return result;
        }
        catch (Throwable e) {
    
    
            throw e;
        }
        finally {
    
    
        }
    }

    public static void logJoinPointBegin(
            Logger logger,
            ProceedingJoinPoint joinPoint,
            String flag) {
    
    
        StringBuilder sb = new StringBuilder();
        sb.append(joinPoint.getSignature().toShortString());
        sb.append(",flag=").append("[").append(flag).append("]");
        sb.append(",args=").append(arrayToString(joinPoint.getArgs()));
        LoggerUtil.info(logger, sb.toString());
    }

    public static Object logJoinPoint(
            Logger logger,
            ProceedingJoinPoint joinPoint,
            Object result,
            String flag) {
    
    
        StringBuilder sb = new StringBuilder();
        sb.append(joinPoint.getSignature().toShortString());
        sb.append(",flag=").append("[").append(flag).append("]");
        sb.append(",result=").append("[").append(String.valueOf(result)).append("]");
        sb.append(",args=").append(arrayToString(joinPoint.getArgs()));
        LoggerUtil.info(logger, sb.toString());

        return result;
    }

    public static Object logJoinPoint(
            Logger logger,
            ProceedingJoinPoint joinPoint,
            Object result,
            String flag,
            Throwable e) {
    
    
        StringBuilder sb = new StringBuilder();
        sb.append(joinPoint.getSignature().toShortString());
        sb.append(",flag=").append("[").append(flag).append("]");
        sb.append(",result=").append("[").append(String.valueOf(result)).append("]");
        sb.append(",args=").append(arrayToString(joinPoint.getArgs()));
        LoggerUtil.error(logger, sb.toString(), e);

        return result;
    }

    private static String arrayToString(Object[] a) {
    
    
        if (a == null)
            return "null";

        int iMax = a.length - 1;
        if (iMax == -1)
            return "[]";

        StringBuilder b = new StringBuilder();
        b.append('[');
        for (int i = 0;; i++) {
    
    
            if (a[i] instanceof Object[]) {
    
    
                b.append(arrayToString((Object[]) a[i]));
            } else {
    
    
                b.append(String.valueOf(a[i]));
            }
            if (i == iMax)
                return b.append(']').toString();
            b.append(", ");
        }
    }

}

猜你喜欢

转载自blog.csdn.net/u013947963/article/details/110002034