@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface LogEvent {
int eventId() default 0;
String eventName() default "";
boolean eventStatus() default false;
}
@Component
@Aspect
@Slf4j
public class LogHandler {
@Resource
private TLogMapper tLogMapper;
@Pointcut("@annotation(com.cncr.*.common.handler.LogEvent)")
public void pointCut() {
}
@AfterReturning(value = "pointCut()")
public void afterReturning(JoinPoint joinPoint) {
insertLog(joinPoint, (byte) 1);
}
@AfterThrowing(value = "pointCut()")
public void afterThrowing(JoinPoint joinPoint) {
insertLog(joinPoint, (byte) 0);
}
public void insertLog(JoinPoint joinPoint, Byte result) {
HttpServletRequest httpServletRequest = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
LogEvent logEvent = method.getAnnotation(LogEvent.class);
int eventId = logEvent.eventId();
if (eventId == 0) {
return;
}
String eventName = logEvent.eventName();
if (StringUtils.isEmpty(eventName)) {
try {
eventName = Objects.requireNonNull(LogEventEnum.LogEventEnum(eventId)).getName();
} catch (Exception e) {
return;
}
}
boolean eventStatus = logEvent.eventStatus();
if (eventStatus) {
String status = result == (byte) 1 ? "成功" : "失败";
eventName = eventName + status;
}
String userName = LogSetConfig.getUsername(httpServletRequest);
TLog tLog = new TLog();
tLog.setGmtCreate(new Date());
tLog.setGmtModified(new Date());
tLog.setLogeventId((long) eventId);
tLog.setLogtext(eventName);
tLog.setOperateTerminalIp("");
tLog.setOperateObject("");
tLog.setOperateUsername(userName);
tLog.setOperateResult(result);
tLogMapper.insert(tLog);
}
}