实现使用AOP记录日志
1.添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.自定义注解
首先在启动类的同级包下边新建一个config包,在这个报下边新建new一个名为Log的Annotation文件
/**
* @author Promise
* @createTime 2018年12月18日 下午9:26:25
* @description 定义一个方法级别的@log注解
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default "";
}
3.建表
根据自己需求的字段建就可以了。
4.创建对应实体类、接口等实现方法
5.创建AOP切面实现类(重点)
将该类放在config包下即可
@Aspect
@Component
public class LogAsPect {
private final static Logger log = org.slf4j.LoggerFactory.getLogger(LogAsPect.class);
@Autowired
private SysLogService sysLogService;
@Autowired
private UserServices userServices;
//表示匹配带有自定义注解的方法
@Pointcut("@annotation(com.sunwoda.ms.dips.config.Log)")
public void pointcut() {}
@Around("pointcut()")
public Object around(ProceedingJoinPoint point) {
Object result =null;
try {
result = point.proceed();
insertLog(point,result);
} catch (Throwable e) {
insertLog(point,e);
}
return result;
}
private void insertLog(ProceedingJoinPoint point ,Object message) {
MethodSignature signature = (MethodSignature)point.getSignature();
Method method = signature.getMethod();
DevHistoryPo devHistoryPo = new DevHistoryPo();
// 注解上的描述
Log userAction = method.getAnnotation(Log.class);
// 请求的类名
String className = point.getTarget().getClass().getName();
// 请求的方法名
String methodName = signature.getName();
// 请求的方法参数值
String args = JSON.toJSONString(point.getArgs());
//强制转换请求的对象为基本对象
BasePo b = (BasePo) point.getArgs()[0];
//用户ID
String userId = userServices.getCurrentAccount();
//操作结果
String opResult = JSON.toJSONString(message);
//数据ID
String dataId = b.getId()+"";
devHistoryPo.setOpContent("请求描述:["+userAction.value()+"],请求类名:["+className+"],请求方法名:["+methodName+"],请求方法的参数值:["+args+"]");
devHistoryPo.setOpMan(userId);
devHistoryPo.setOpResult(opResult);
devHistoryPo.setOpDate(new java.sql.Timestamp(new Date().getTime()));
devHistoryPo.setDeviceCode(dataId);
sysLogService.save(devHistoryPo);
}
}
6.使用
直接在控制器方法或service层添加注解,如:
@Log(“增加”)
注解名是在第三步,自定义注解的时候命名的。