1疾瓮、背景
????????在企業(yè)級應(yīng)用脖镀,我們經(jīng)常需要記錄后端用戶操作各種功能的日志,方便未來發(fā)現(xiàn)業(yè)務(wù)有問題狼电,能通過用戶操作日志追湖全流程蜒灰。此外,我們還可以通過統(tǒng)計用戶操作日志肩碟,分析某些功能點擊的次數(shù)强窖,判斯哪些功能經(jīng)常使用,那些功能不經(jīng)常使用其至可以下線通過這種量化的分析削祈,對于產(chǎn)品未來的功能規(guī)劃也起到指導(dǎo)作用翅溺,所以優(yōu)雅的設(shè)計一個后臺操作日志功能,對于企業(yè)級系統(tǒng)必不可少髓抑。
2咙崎、應(yīng)用場景
使用場景
1、規(guī)則類變更場景(比如活動配置規(guī)則修改)吨拍、
2褪猛、配置類變更場景(比如公共配置修改)
3、敏感信息類變更場景(比如客戶信息修改)
以上場景羹饰,如果有變更伊滋,通常會對我們系統(tǒng)的業(yè)務(wù)產(chǎn)生直接的影響,如果人為失誤队秩、有可能造成直接的經(jīng)濟損失笑旺,所以我們需要記錄每一筆操作日志。
設(shè)計方案注意點
1刹碾、記錄后端操作日志必須與業(yè)務(wù)功能解耦燥撞,不能硬編碼耦合在一起,增加開發(fā)人員的工作量迷帜;
2物舒、后端操作日志必須記錄管理后臺操作的菜單、操作的功能戏锹、操作人冠胯、操作時間等重要核心的信息;
3锦针、后端操作日志異步入庫荠察,不能阻塞主業(yè)務(wù)流程置蜀;
4、后端操作日志重要的信息支持全模糊查詢方便管理員快速查詢信息悉盆,比如:操作內(nèi)容字段盯荤;
3、實現(xiàn)方案
1焕盟、底層base公共服務(wù)提供日志相關(guān)的服務(wù)(保存日志秋秤、查詢?nèi)罩?
2、通過自定義注解+AOP攔載請求脚翘,自動上報日志到base的日志服務(wù)
3灼卢、通過引入guava的eventbus異步發(fā)布事件實現(xiàn)日志的異步入mysql庫。
4来农、考慮到操作內(nèi)容字段內(nèi)容比較大鞋真,基于canal+kafka,異步將日志表記錄同步到es沃于,通過全模糊查詢es涩咖,可快速查詢?nèi)罩居涗洝M瑫r考慮到操作日志表比較大揽涮,每3個月歸檔日志表一次抠藕,保存mysql日志表查詢性能
4、架構(gòu)設(shè)計
后端日志組件架構(gòu)圖