Java 自定义日志注解中的队列处理

需求:

    通过方法头增加注解的形式记录日志,这个时候日志是要在怎样的一个时机写入数据库?一进入方法?方法执行结束?

实现:

    在这里采用切面加队列的方式来处理,下面我只简单的将关键词句贴出:

    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条时写入数据库,先出先删。

    这边太懒只是剪了些较关键的代码,根据这个顺序自己脑补实现吧,想吐槽的憋着不用告诉我...


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章