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