package com.engine.organization.util; import com.engine.organization.annotation.Log; import com.engine.organization.entity.LoggerContext; import com.engine.organization.enums.DeleteTypeEnum; import com.engine.organization.mapper.SISLog.SISLogMapper; import com.engine.organization.util.db.MapperProxyFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Method; import java.lang.reflect.Parameter; import java.util.Arrays; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @Author weaver_cl * @Description: TODO 日志切面操作 * @Date 2022/4/27 * @Version V1.0 **/ public class LogAspect { Class clazz; Method method; LoggerContext loggerContext; private static final Logger logger = LoggerFactory.getLogger(LogAspect.class); public LogAspect(Class clazz,Method method,LoggerContext loggerContext) { this.clazz = clazz; this.method = method; this.loggerContext = loggerContext; } public void start() { try { //线程池 ExecutorService taskExecutor = Executors.newCachedThreadPool(); taskExecutor.execute(() -> { boolean f = method.isAnnotationPresent(Log.class); if (f) { Log annotation = method.getAnnotation(Log.class); Parameter[] parameters = method.getParameters(); String value = annotation.operateType().getValue(); String operateDesc = annotation.operateDesc(); loggerContext.setOperateDesc(operateDesc); loggerContext.setCreateTime(new Date()); loggerContext.setOperateType(value); loggerContext.setParamsStr(Arrays.toString(parameters)); loggerContext.setClientIp("127.0.0.1"); loggerContext.setMethodName(method.getName()); loggerContext.setClassName(clazz.getName()); loggerContext.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); MapperProxyFactory.getProxy(SISLogMapper.class).insert(loggerContext); } }); } catch (Exception e) { // 记录本地异常日志 logger.error("后置通知异常:异常信息:", e.getMessage()); } } }