AOP打印日志
...小于 1 分钟
AOP打印日志
1. @Log 注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default "";
}
2. AOP记录操作日志
/**
* AOP 记录用户操作日志
*/
@Slf4j
@Aspect
@Component
public class LogAspect {
@Autowired
private FebsProperties febsProperties;
@Autowired
private LogService logService;
@Pointcut("@annotation(com.ylzinfo.common.annotation.Log)")
public void pointcut() {
// do nothing
}
@Around("pointcut()")
public Object around(ProceedingJoinPoint point) throws JsonProcessingException {
Object result = null;
long beginTime = System.currentTimeMillis();
try {
// 执行方法
result = point.proceed();
} catch (Throwable e) {
log.error(e.getMessage());
}
// 获取 request
HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
// 设置 IP 地址
String ip = IPUtil.getIpAddr(request);
// 执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
if (febsProperties.isOpenAopLog()) {
// 保存日志
String token = (String) SecurityUtils.getSubject().getPrincipal();
String username = JWTUtil.getUsername(token);
SysLog log = new SysLog();
log.setUsername(username);
log.setIp(ip);
log.setTime(time);
logService.saveLog(point, log);
}
return result;
}
}
将用户名、操作ip、操作时长记录到数据库中
3. 具体使用
@Log("新增用户")
@PostMapping
@RequiresPermissions("user:add")
public void addUser( @Valid User user) throws FebsException {
....
}
赞助