需求:
通過方法頭增加註解的形式記錄日誌,這個時候日誌是要在怎樣的一個時機寫入數據庫?一進入方法?方法執行結束?
實現:
在這裏採用切面加隊列的方式來處理,下面我只簡單的將關鍵詞句貼出:
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條時寫入數據庫,先出先刪。
這邊太懶只是剪了些較關鍵的代碼,根據這個順序自己腦補實現吧,想吐槽的憋着不用告訴我...