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

本文介绍了一种通过自定义注解结合AOP技术实现的方法级日志记录方案。利用Spring AOP切面及ThreadLocal存储日志信息,并通过队列方式批量写入数据库,有效减轻了系统的即时负担。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:

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

实现:

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

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值