All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cool.linco.common.log.method.Executor Maven / Gradle / Ivy

package cool.linco.common.log.method;

import cool.linco.common.log.handle.DefaultMethodLogHandler;
import cool.linco.common.log.handle.IMethodLogHandler;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.event.Level;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;


/**
 * @author lin
 * 执行runningLog注解
 */
@Aspect //该注解标示该类为切面类
@Component //注入依赖

public class Executor {

    @ConditionalOnMissingBean(IMethodLogHandler.class)
    @Bean
    public IMethodLogHandler defaultLogDataHandler() {
        return new DefaultMethodLogHandler();
    }

    @Resource
    IMethodLogHandler methodLogHandler;

    @Pointcut("execution(* *(..))&&@annotation(cool.linco.common.log.method.RunningLog)")
    public void log() {}

    @Around("log() && @annotation(runningLog)")
    public Object around(ProceedingJoinPoint joinPoint, RunningLog runningLog) throws Throwable {
//      提前确认以减少计算
        Level logLevel = runningLog.logLevel();
        if (!methodLogHandler.isLogEnabled(logLevel)) {
            return joinPoint.proceed();
        }
        Object[] paramsValues = joinPoint.getArgs();
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        String[] paramsNames = methodSignature.getParameterNames();
        String method = methodSignature.getName();
        String clazz = methodSignature.getDeclaringTypeName();
        methodLogHandler.logOnEntry(clazz, method, paramsNames, paramsValues, logLevel);
        long startTime = System.currentTimeMillis();
        Object result = joinPoint.proceed();
        long time = System.currentTimeMillis() - startTime;
        methodLogHandler.logOnExit(clazz, method, paramsNames, paramsValues, time, result, logLevel);
        return result;
    }

}






© 2015 - 2025 Weber Informatics LLC | Privacy Policy