1、背景
????????在企業(yè)級應用,我們經常需要記錄后端用戶操作各種功能的日志,方便未來發(fā)現(xiàn)業(yè)務有問題,能通過用戶操作日志追湖全流程。此外,我們還可以通過統(tǒng)計用戶操作日志,分析某些功能點擊的次數,判斯哪些功能經常使用,那些功能不經常使用其至可以下線通過這種量化的分析,對于產品未來的功能規(guī)劃也起到指導作用,所以優(yōu)雅的設計一個后臺操作日志功能,對于企業(yè)級系統(tǒng)必不可少。
2、應用場景
使用場景
1、規(guī)則類變更場景(比如活動配置規(guī)則修改)、
2、配置類變更場景(比如公共配置修改)
3、敏感信息類變更場景(比如客戶信息修改)
以上場景,如果有變更,通常會對我們系統(tǒng)的業(yè)務產生直接的影響,如果人為失誤、有可能造成直接的經濟損失,所以我們需要記錄每一筆操作日志。
設計方案注意點
1、記錄后端操作日志必須與業(yè)務功能解耦,不能硬編碼耦合在一起,增加開發(fā)人員的工作量;
2、后端操作日志必須記錄管理后臺操作的菜單、操作的功能、操作人、操作時間等重要核心的信息;
3、后端操作日志異步入庫,不能阻塞主業(yè)務流程;
4、后端操作日志重要的信息支持全模糊查詢方便管理員快速查詢信息,比如:操作內容字段;
3、實現(xiàn)方案
1、底層base公共服務提供日志相關的服務(保存日志、查詢日志)
2、通過自定義注解+AOP攔載請求,自動上報日志到base的日志服務
3、通過引入guava的eventbus異步發(fā)布事件實現(xiàn)日志的異步入mysql庫。
4、考慮到操作內容字段內容比較大,基于canal+kafka,異步將日志表記錄同步到es,通過全模糊查詢es,可快速查詢日志記錄。同時考慮到操作日志表比較大,每3個月歸檔日志表一次,保存mysql日志表查詢性能
4、架構設計
后端日志組件架構圖
