本發(fā)明屬于數(shù)據(jù)處理,更具體的說,尤其涉及一種基于mdc的日志聚合方法和系統(tǒng)、電子設(shè)備、存儲(chǔ)介質(zhì)。
背景技術(shù):
1、在現(xiàn)代軟件開發(fā)中,日志記錄是一個(gè)不可或缺的組成部分,它幫助開發(fā)人員監(jiān)控應(yīng)用的狀態(tài),診斷問題并優(yōu)化性能。目前,許多系統(tǒng)采用了log4j組件作為其日志記錄解決方案。log4j是一個(gè)廣泛使用的java日志記錄工具,它提供了靈活的配置選項(xiàng)和強(qiáng)大的日志管理功能。
2、log4j組件通過在后臺(tái)服務(wù)中集成,允許開發(fā)者按照不同的級(jí)別(如debug、info、warn、error等)記錄日志信息。這種集成方式使得日志的生成和維護(hù)變得相對簡單。然而,盡管log4j提供了基本的日志功能,它在多線程和微服務(wù)架構(gòu)中的日志管理方面存在一些局限性。
3、但是,在處理多線程多服務(wù)環(huán)境中的日志聚合時(shí)存在挑戰(zhàn),這導(dǎo)致無法有效地收集和分析來自不同線程的日志數(shù)據(jù),也即無法將進(jìn)行日志聚合。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明的目的在于提供一種基于mdc的日志聚合方法和系統(tǒng)、電子設(shè)備、存儲(chǔ)介質(zhì),用于實(shí)現(xiàn)線程內(nèi)部日志追蹤、跨線程日志聚合、跨服務(wù)日志聚合;使得運(yùn)維更加便捷,定位問題更加方便。
2、本技術(shù)第一方面公開了一種基于mdc的日志聚合方法,包括:
3、獲取用戶操作請求;所述用戶操作請求用于指示用戶對系統(tǒng)進(jìn)行操作的請求;
4、依據(jù)所述用戶操作請求所涉及到的操作對象類型,基于mdc對所述用戶操作請求所涉及的日志進(jìn)行追蹤聚合;所述操作對象類型為單線程操作、跨線程操作和跨服務(wù)操作中的至少一種;日志追蹤包括:線程內(nèi)部日志追蹤、跨線程日志追蹤和跨服務(wù)日志追蹤中的至少一種。
5、可選的,在所述操作對象類型包括單線程操作時(shí),所述日志追蹤包括:線程內(nèi)部日志追蹤;
6、在所述操作對象類型包括跨線程操作時(shí),所述日志追蹤包括:跨線程日志追蹤;
7、在所述操作對象類型包括跨服務(wù)操作時(shí),所述日志追蹤包括:跨服務(wù)日志追蹤。
8、可選的,所述日志追蹤為線程內(nèi)部日志追蹤時(shí),所述基于mdc對所述用戶操作請求所涉及的日志進(jìn)行追蹤聚合,包括:
9、通過aop攔截所述用戶操作請求對應(yīng)的服務(wù)請求;
10、創(chuàng)建所述服務(wù)請求對應(yīng)的標(biāo)識(shí);所述標(biāo)識(shí)用于指示所述服務(wù)請求唯一的標(biāo)識(shí)符;不同的服務(wù)請求,對應(yīng)的標(biāo)識(shí)不同;
11、將所述標(biāo)識(shí)保存到mdc的聚合字段,以使當(dāng)前線程中所有方法均能訪問所述聚合字段,并在各個(gè)方法寫日志時(shí),日志框架自動(dòng)打印所述聚合字段,將當(dāng)前服務(wù)對所述用戶操作請求寫的所有日志聚合。
12、可選的,所述標(biāo)識(shí)為隨機(jī)數(shù);不同的服務(wù)請求對應(yīng)的隨機(jī)數(shù)不同。
13、可選的,所述日志追蹤為跨線程日志追蹤時(shí),所述基于mdc對所述用戶操作請求所涉及的日志進(jìn)行追蹤聚合,包括:
14、主線程按照線程內(nèi)部日志追蹤,創(chuàng)建mdc的聚合字段;
15、在所述主線程創(chuàng)建子線程時(shí),將所述主線程中mdc的聚合字段的數(shù)據(jù),拷貝至所述子線程的mdc的聚合字段,以使子線程中所有方法均能訪問所述子線程的聚合字段,并在各個(gè)方法寫日志時(shí),日志框架自動(dòng)打印所述聚合字段,將所述主線程和所述子線程對所述用戶操作請求寫的所有日志進(jìn)行聚合。
16、可選的,所述日志追蹤為跨服務(wù)日志追蹤時(shí),所述基于mdc對所述用戶操作請求所涉及的日志進(jìn)行追蹤聚合,包括:
17、用戶訪問第一服務(wù)時(shí),第一服務(wù)按照線程內(nèi)部日志追蹤,生成聚合字段;
18、在所述第一服務(wù)訪問第二服務(wù)時(shí),從第一服務(wù)的mdc中獲取聚合字段的數(shù)據(jù),并將所述聚合字段的數(shù)據(jù)設(shè)置到http請求的請求頭中,并發(fā)出http請求;
19、在第二服務(wù)接收到來自所述第一服務(wù)的http請求之后,第二服務(wù)解析所述http請求,得到第一服務(wù)的聚合字段的數(shù)據(jù),并將所述聚合字段的數(shù)據(jù)保存到所述第二服務(wù)的mdc的聚合字段中,以使所述第一服務(wù)和第二服務(wù)中所有方法均能訪問各自對應(yīng)的聚合字段,且聚合字段的數(shù)據(jù)相同,日志框架自動(dòng)打印所述聚合字段,將所述第一服務(wù)和所述第二服務(wù)對所述用戶操作請求寫的所有日志進(jìn)行聚合。
20、本技術(shù)第二方面公開了一種基于mdc的日志聚合系統(tǒng),包括:
21、獲取模塊,用于獲取用戶操作請求;所述用戶操作請求用于指示用戶對系統(tǒng)進(jìn)行操作的請求;
22、追蹤模塊,用于依據(jù)所述用戶操作請求所涉及到的操作對象類型,基于mdc對所述用戶操作請求所涉及的日志進(jìn)行追蹤聚合;所述操作對象類型為單線程操作、跨線程操作和跨服務(wù)操作中的至少一種;日志追蹤包括:線程內(nèi)部日志追蹤、跨線程日志追蹤和跨服務(wù)日志追蹤中的至少一種。
23、可選的,追蹤模塊用于依據(jù)所述用戶操作請求所涉及到的操作對象類型,基于mdc對所述用戶操作請求所涉及的日志進(jìn)行追蹤聚合時(shí),具體用于:
24、所述日志追蹤為線程內(nèi)部日志追蹤時(shí):通過aop攔截所述用戶操作請求對應(yīng)的服務(wù)請求;創(chuàng)建所述服務(wù)請求對應(yīng)的標(biāo)識(shí);所述標(biāo)識(shí)用于指示一個(gè)服務(wù)請求;不同的服務(wù)請求,對應(yīng)的標(biāo)識(shí)不同;將所述標(biāo)識(shí)保存到mdc的聚合字段,以使當(dāng)前線程中所有方法均能訪問所述聚合字段,并在各個(gè)方法寫日志時(shí),日志框架自動(dòng)打印所述聚合字段,將當(dāng)前服務(wù)對所述用戶操作請求寫的所有日志聚合;
25、所述日志追蹤為跨線程日志追蹤時(shí):主線程按照線程內(nèi)部日志追蹤,創(chuàng)建mdc的聚合字段;在所述主線程創(chuàng)建子線程時(shí),將所述主線程中mdc的聚合字段的數(shù)據(jù),拷貝至所述子線程的mdc的聚合字段,以使子線程中所有方法均能訪問所述子線程的聚合字段,并在各個(gè)方法寫日志時(shí),日志框架自動(dòng)打印所述聚合字段,將所述主線程和所述子線程對所述用戶操作請求寫的所有日志進(jìn)行聚合;
26、所述日志追蹤為跨服務(wù)日志追蹤時(shí):用戶訪問第一服務(wù)時(shí),第一服務(wù)按照線程內(nèi)部日志追蹤,生成聚合字段;在所述第一服務(wù)訪問第二服務(wù)時(shí),從第一服務(wù)的mdc中獲取聚合字段的數(shù)據(jù),并將所述聚合字段的數(shù)據(jù)設(shè)置到http請求的請求頭中,并發(fā)出http請求;在第二服務(wù)接收到來自所述第一服務(wù)的http請求之后,第二服務(wù)解析所述http請求,得到第一服務(wù)的聚合字段的數(shù)據(jù),并將所述聚合字段的數(shù)據(jù)保存到所述第二服務(wù)的mdc的聚合字段中,以使所述第一服務(wù)和第二服務(wù)中所有方法均能訪問各自對應(yīng)的聚合字段,且聚合字段的數(shù)據(jù)相同,日志框架自動(dòng)打印所述聚合字段,將所述第一服務(wù)和所述第二服務(wù)對所述用戶操作請求寫的所有日志進(jìn)行聚合。
27、本技術(shù)第三方面公開了一種電子設(shè)備,包括:
28、一個(gè)或多個(gè)處理器;
29、存儲(chǔ)裝置,其上存儲(chǔ)有一個(gè)或多個(gè)程序;
30、當(dāng)一個(gè)或多個(gè)程序被一個(gè)或多個(gè)處理器執(zhí)行時(shí),使得一個(gè)或多個(gè)處理器實(shí)現(xiàn)如本技術(shù)第一方面中任一項(xiàng)所述的基于mdc的日志聚合方法。
31、本技術(shù)第四方面公開了一種存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,其中,計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如本技術(shù)第一方面中任一項(xiàng)所述的基于mdc的日志聚合方法。
32、從上述技術(shù)方案可知,本發(fā)明提供的一種基于mdc的日志聚合方法,包括:獲取用戶操作請求;用戶操作請求用于指示用戶對系統(tǒng)進(jìn)行操作的請求;依據(jù)用戶操作請求所涉及到的操作對象類型,基于mdc對用戶操作請求所涉及的日志進(jìn)行追蹤聚合;操作對象類型為單線程操作、跨線程操作和跨服務(wù)操作中的至少一種;日志追蹤包括:線程內(nèi)部日志追蹤、跨線程日志追蹤和跨服務(wù)日志追蹤中的至少一種;也即本技術(shù)可以實(shí)現(xiàn)線程內(nèi)部日志追蹤、跨線程日志聚合、跨服務(wù)日志聚合;使得運(yùn)維更加便捷,定位問題更加方便。