需求:
通过方法头增加注解的形式记录日志,这个时候日志是要在怎样的一个时机写入数据库?一进入方法?方法执行结束?
实现:
在这里采用切面加队列的方式来处理,下面我只简单的将关键词句贴出:
1.自定义注解
@OperationLog(source = "",title ="我的订单")
2.创建切面类
@Aspect
@Component
public class LogAspect {
public LogAspect(){
System.out.println("初始化日志切面 ");
}
private static final ThreadLocal<SysLog> sysLogThreadLocal = new NamedThreadLocal<SysLog>("ThreadLocal SysLog");//本地线程
...
}
注:ThreadLocal本地线程,用于存放当前请求日志,根据省略掉的前后环绕产生的日志变化放入该线程。
3.创建队列处理类
public class LogLinke {
//定义并发非阻塞线程安全双向Deque缓存队列,存储待入库的日志记录 JDk7新特性
public static ConcurrentLinkedDeque<SysLog> logList = new ConcurrentLinkedDeque<SysLog>();
...
}
说明:根据第2步方法调用结束或产生异常时将日志添加到队列方法logList中,这边可以配个定时方法,限定当logList的队列达到300条或500条时写入数据库,先出先删。
这边太懒只是剪了些较关键的代码,根据这个顺序自己脑补实现吧,想吐槽的憋着不用告诉我...