本技術(shù)涉及計(jì)算機(jī),尤其涉及一種日志記錄方法、裝置、存儲(chǔ)介質(zhì)及電子設(shè)備。
背景技術(shù):
1、目前,為了記錄用戶在系統(tǒng)中的操作,采用在基本的業(yè)務(wù)代碼的處理邏輯中添加對(duì)用戶的具體操作進(jìn)行記錄的方式進(jìn)行日志記錄,以便運(yùn)維人員根據(jù)日志對(duì)系統(tǒng)進(jìn)行維護(hù)。但是,將日志記錄代碼添加在業(yè)務(wù)代碼中,會(huì)提高業(yè)務(wù)代碼的復(fù)雜度,造成業(yè)務(wù)代碼冗余,使得業(yè)務(wù)代碼的可讀性降低。因此,如何實(shí)現(xiàn)業(yè)務(wù)代碼和日志代碼的分離是目前亟需解決的問題。
技術(shù)實(shí)現(xiàn)思路
1、鑒于上述問題,本技術(shù)提供一種日志記錄方法、裝置、存儲(chǔ)介質(zhì)及電子設(shè)備,解決了如何實(shí)現(xiàn)業(yè)務(wù)代碼和日志代碼的分離的問題。
2、為解決上述技術(shù)問題,本技術(shù)提出以下方案:
3、第一方面,本技術(shù)提供了一種日志記錄方法,方法包括:根據(jù)自定義注解獲取第一日志內(nèi)容,自定義注解采用面向切面編程的方式預(yù)先織入至業(yè)務(wù)代碼中;根據(jù)接口的自定義實(shí)現(xiàn)類獲取第二日志內(nèi)容,接口采用面向切面編程的方式預(yù)先織入至業(yè)務(wù)代碼中;將第一日志內(nèi)容和第二日志內(nèi)容存儲(chǔ)至數(shù)據(jù)庫。
4、在業(yè)務(wù)開發(fā)中可以無需考慮日志相關(guān)的內(nèi)容,只需要在開發(fā)完成后在接口位置加上注解即可,完全實(shí)現(xiàn)日志與業(yè)務(wù)程序的分離。針對(duì)眾多需要添加日志相關(guān)功能的后端接口中只需要這一套處理邏輯即可。針對(duì)較為復(fù)雜的業(yè)務(wù)操作,也可以對(duì)預(yù)留的接口進(jìn)行自定義實(shí)現(xiàn),此操作則是將不同模塊的日志處理進(jìn)行了分離,也方便了后續(xù)程序的維護(hù)操作。
5、結(jié)合第一方面,在一種可能的實(shí)現(xiàn)方式中,解析自定義注解得到注解參數(shù)和業(yè)務(wù)參數(shù),注解參數(shù)用于指示待操作業(yè)務(wù)的屬性信息,業(yè)務(wù)參數(shù)用于指示待操作業(yè)務(wù)的基本信息;解析注解參數(shù)和業(yè)務(wù)參數(shù)信息得到spel表達(dá)式;在內(nèi)置的數(shù)據(jù)庫中查詢數(shù)據(jù),將數(shù)據(jù)填充至spel表達(dá)式,得到第一日志內(nèi)容。
6、根據(jù)spel表達(dá)式構(gòu)造日志內(nèi)容可以用于一些簡(jiǎn)單的業(yè)務(wù)操作。例如刪除操作、新增操作、查詢操作等。
7、結(jié)合第一方面,在另一種可能的實(shí)現(xiàn)方式中,解析自定義注解,得到自定義實(shí)現(xiàn)類,通過反射將自定義實(shí)現(xiàn)類實(shí)例化;執(zhí)行前置處理,得到第一數(shù)據(jù),第一數(shù)據(jù)用于指示執(zhí)行業(yè)務(wù)代碼之前產(chǎn)生的數(shù)據(jù);執(zhí)行后置處理,得到第二數(shù)據(jù),第二數(shù)據(jù)用于指示執(zhí)行業(yè)務(wù)代碼之后產(chǎn)生的數(shù)據(jù);根據(jù)第一數(shù)據(jù)和第二數(shù)據(jù)構(gòu)造第二日志內(nèi)容。
8、由于具體的實(shí)現(xiàn)對(duì)象以參數(shù)的方式添加在注解中,類制定了對(duì)象數(shù)據(jù)、表示、所能完成的操作,因此解析注解可以得到接口自定義實(shí)現(xiàn)的類,即對(duì)象參數(shù),通過實(shí)例化接口自定義實(shí)現(xiàn)的類來創(chuàng)建對(duì)象,此對(duì)象被稱為該類的實(shí)例。對(duì)該對(duì)象執(zhí)行前置處理和后置處理,并比較執(zhí)行業(yè)務(wù)代碼之前產(chǎn)生的第一數(shù)據(jù)和執(zhí)行業(yè)務(wù)代碼之后產(chǎn)生的第二數(shù)據(jù),進(jìn)而生成復(fù)雜操作的日志內(nèi)容。
9、結(jié)合第一方面,在另一種可能的實(shí)現(xiàn)方式中,按照預(yù)設(shè)格式拼接第一日志內(nèi)容和第二日志內(nèi)容,將拼接后的日志內(nèi)容添加至日志對(duì)象中,并填充日志對(duì)象的其他屬性;通過異步的方式將日志對(duì)象存儲(chǔ)至數(shù)據(jù)庫。
10、對(duì)于異步日志來說,每次有日志消息產(chǎn)生的時(shí)候,只需要一個(gè)存儲(chǔ)的行為即可,存儲(chǔ)結(jié)束就可以繼續(xù)執(zhí)行后面的業(yè)務(wù)代碼了,而真正寫入到磁盤的操作,是由后臺(tái)線程進(jìn)行的,這樣做的好處就是:前臺(tái)線程不會(huì)阻塞在寫日志上,后臺(tái)線程真正寫出日志時(shí),日志消息往往已經(jīng)積累了很多,此時(shí)只需要調(diào)用一次io函數(shù),而不需要每條消息都調(diào)用一個(gè)io函數(shù),如此也提高了效率。
11、第二方面,本技術(shù)提供了一種日志記錄裝置,日志記錄裝置包括:
12、獲取模塊,用于根據(jù)自定義注解獲取第一日志內(nèi)容,自定義注解采用面向切面編程的方式預(yù)先織入至業(yè)務(wù)代碼中;根據(jù)接口的自定義實(shí)現(xiàn)類獲取第二日志內(nèi)容,接口采用面向切面編程的方式預(yù)先織入至業(yè)務(wù)代碼中。
13、存儲(chǔ)模塊,用于將第一日志內(nèi)容和第二日志內(nèi)容存儲(chǔ)至數(shù)據(jù)庫。
14、在業(yè)務(wù)開發(fā)中可以無需考慮日志相關(guān)的內(nèi)容,只需要在開發(fā)完成后在接口位置加上注解即可,完全實(shí)現(xiàn)日志與業(yè)務(wù)程序的分離。針對(duì)眾多需要添加日志相關(guān)功能的后端接口中只需要這一套處理邏輯即可。針對(duì)較為復(fù)雜的業(yè)務(wù)操作,也可以對(duì)預(yù)留的接口進(jìn)行自定義實(shí)現(xiàn),此操作則是將不同模塊的日志處理進(jìn)行了分離,也方便了后續(xù)程序的維護(hù)操作。
15、結(jié)合第二方面,在一種可能的實(shí)現(xiàn)方式中,獲取模塊具體用于:解析自定義注解得到注解參數(shù)和業(yè)務(wù)參數(shù),注解參數(shù)用于指示待操作業(yè)務(wù)的屬性信息,業(yè)務(wù)參數(shù)用于指示待操作業(yè)務(wù)的基本信息;解析注解參數(shù)和業(yè)務(wù)參數(shù)信息得到spel表達(dá)式;在內(nèi)置的數(shù)據(jù)庫中查詢數(shù)據(jù),將數(shù)據(jù)填充至spel表達(dá)式,得到第一日志內(nèi)容。
16、根據(jù)spel表達(dá)式構(gòu)造日志內(nèi)容可以用于一些簡(jiǎn)單的業(yè)務(wù)操作。例如刪除操作、新增操作、查詢操作等。
17、結(jié)合第二方面,在另一種可能的實(shí)現(xiàn)方式中,獲取模塊具體用于:解析自定義注解,得到自定義實(shí)現(xiàn)類,通過反射將自定義實(shí)現(xiàn)類實(shí)例化;執(zhí)行前置處理,得到第一數(shù)據(jù),第一數(shù)據(jù)用于指示執(zhí)行業(yè)務(wù)代碼之前產(chǎn)生的數(shù)據(jù);執(zhí)行后置處理,得到第二數(shù)據(jù),第二數(shù)據(jù)用于指示執(zhí)行業(yè)務(wù)代碼之后產(chǎn)生的數(shù)據(jù);根據(jù)第一數(shù)據(jù)和第二數(shù)據(jù)構(gòu)造第二日志內(nèi)容。
18、由于具體的實(shí)現(xiàn)對(duì)象以參數(shù)的方式添加在注解中,類制定了對(duì)象數(shù)據(jù)、表示、所能完成的操作,因此解析注解可以得到接口自定義實(shí)現(xiàn)的類,即對(duì)象參數(shù),通過實(shí)例化接口自定義實(shí)現(xiàn)的類來創(chuàng)建對(duì)象,此對(duì)象被稱為該類的實(shí)例。對(duì)該對(duì)象執(zhí)行前置處理和后置處理,并比較執(zhí)行業(yè)務(wù)代碼之前產(chǎn)生的第一數(shù)據(jù)和執(zhí)行業(yè)務(wù)代碼之后產(chǎn)生的第二數(shù)據(jù),進(jìn)而生成復(fù)雜操作的日志內(nèi)容。
19、結(jié)合第二方面,在另一種可能的實(shí)現(xiàn)方式中,存儲(chǔ)模塊具體用于:按照預(yù)設(shè)格式拼接第一日志內(nèi)容和第二日志內(nèi)容,將拼接后的日志內(nèi)容添加至日志對(duì)象中,并填充日志對(duì)象的其他屬性;通過異步的方式將日志對(duì)象存儲(chǔ)至數(shù)據(jù)庫。
20、對(duì)于異步日志來說,每次有日志消息產(chǎn)生的時(shí)候,只需要一個(gè)存儲(chǔ)的行為即可,存儲(chǔ)結(jié)束就可以繼續(xù)執(zhí)行后面的業(yè)務(wù)代碼了,而真正寫入到磁盤的操作,是由后臺(tái)線程進(jìn)行的,這樣做的好處就是:前臺(tái)線程不會(huì)阻塞在寫日志上,后臺(tái)線程真正寫出日志時(shí),日志消息往往已經(jīng)積累了很多,此時(shí)只需要調(diào)用一次io函數(shù),而不需要每條消息都調(diào)用一個(gè)io函數(shù),如此也提高了效率。
21、為了實(shí)現(xiàn)上述目的,根據(jù)本技術(shù)的第三方面,提供了一種存儲(chǔ)介質(zhì),所述存儲(chǔ)介質(zhì)包括存儲(chǔ)的程序,其中,在所述程序運(yùn)行時(shí)控制所述存儲(chǔ)介質(zhì)所在設(shè)備執(zhí)行上述第一方面的日志記錄方法。
22、為了實(shí)現(xiàn)上述目的,根據(jù)本技術(shù)的第四方面,提供了一種電子設(shè)備,所述設(shè)備包括至少一個(gè)處理器、以及與處理器連接的至少一個(gè)存儲(chǔ)器、總線;其中,處理器、存儲(chǔ)器通過總線完成相互間的通信;處理器用于調(diào)用存儲(chǔ)器中的程序指令,以執(zhí)行上述第一方面的日志記錄方法。
23、借由上述技術(shù)方案,本技術(shù)提供的技術(shù)方案至少具有下列優(yōu)點(diǎn):
24、本技術(shù)提供的一種日志記錄方法、裝置、存儲(chǔ)介質(zhì)及電子設(shè)備,本技術(shù)可以在業(yè)務(wù)開發(fā)中可以無需考慮日志相關(guān)的內(nèi)容,只需要在開發(fā)完成后在接口位置加上注解即可,完全實(shí)現(xiàn)日志與業(yè)務(wù)程序的分離。針對(duì)眾多需要添加日志相關(guān)功能的后端接口中只需要這一套處理邏輯即可。針對(duì)較為復(fù)雜的業(yè)務(wù)操作,也可以對(duì)預(yù)留的接口進(jìn)行自定義實(shí)現(xiàn),此操作則是將不同模塊的日志處理進(jìn)行了分離,也方便了后續(xù)程序的維護(hù)操作。
25、上述說明僅是本技術(shù)技術(shù)方案的概述,為了能夠更清楚了解本技術(shù)的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本技術(shù)的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本技術(shù)的具體實(shí)施方式。