import org.apache.commons.lang.StringUtils;
import java.lang.annotation.*;
/**
* 自定义操作日志记录注解
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER, ElementType.METHOD})
public @interface Log {
/**
* 功能
*/
String function() default StringUtils.EMPTY;
/**
* 操作人类别
*/
OperatorType operatorType() default OperatorType.OTHER;
}
package org.example.log;
/**
* 操作人类别
*
*/
public enum OperatorType {
/**
* 查询
*/
SELECT,
/**
* 新增
*/
INSERT,
/**
* 修改
*/
UPDATE,
/**
* 删除
*/
DELETE,
/**
* 其它
*/
OTHER,
/**
* 授权
*/
GRANT,
/**
* 导出
*/
EXPORT,
/**
* 导入
*/
IMPORT,
/**
* 强退
*/
FORCE,
/**
* 生成代码
*/
GEN_CODE,
/**
* 清空数据
*/
CLEAN
}
package org.example.log;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
* 操作日志记录处理
*/
@Slf4j
@Aspect
@Component
public class LogAspect {
/**
* 处理完请求后执行
*/
@AfterReturning(pointcut = "@annotation(controllerLog)")
public void doAfterReturning(Log controllerLog) {
handleLog(controllerLog);
}
protected void handleLog(Log controllerLog) {
try {
// 获取当前的用户
// LoginUser loginUser = SpringSecurity.getLoginUser();
// *========数据库日志=========*//
// operateLog operateLog = operateLog.builder()
// .operateUserId(loginUser.getSysUserId())
// .operateName(loginUser.getTrueName())
// .operateFunction(controllerLog.function())
// .OperateType((byte) controllerLog.operatorType().ordinal())
// .operatorIP(loginUser.getIpaddr())
// .operateDate(LocalDateTime.now())
// .belong(SysConstants.SYS_CODE)
// .build();
// 保存数据库--这里我用的是异步事件
// SpringUtils.publishEvent(operateLog);
log.info("日志记录,type="+controllerLog.operatorType().ordinal()+"----function="+controllerLog.function());
} catch (Exception exp) {
// 记录本地异常日志
log.error("==前置通知异常==");
log.error("异常信息:{}", exp.getMessage());
exp.printStackTrace();
}
}
}