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條時寫入數據庫,先出先刪。

    這邊太懶只是剪了些較關鍵的代碼,根據這個順序自己腦補實現吧,想吐槽的憋着不用告訴我...


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