本發(fā)明涉及日志生成技術(shù)領(lǐng)域,更具體地,涉及一種json格式日志的生成方法及裝置。
背景技術(shù):
在開發(fā)應(yīng)用中,日志操作包log4j是apache的一個開源項目,通過使用log4j可以控制日志信息輸送的目的地是控制臺、文件或者gui組件等。在實際應(yīng)用中,通常需要將字符串信息生成json格式的日志輸出,能夠?qū)⑷罩局庇^地展現(xiàn)在界面上。
目前,log4j只能將json格式的字符串生成json格式的日志,無法將外部傳入的其它格式的字符串生成對應(yīng)的json格式的日志。
而在實際應(yīng)用中,希望能夠?qū)⒏鞣N格式的自定義的字符串順利生成json格式的日志,通過現(xiàn)有的log4j功能是無法實現(xiàn)的,這對log4j的功能造成了很大的限制,對開發(fā)人員也造成了很大的不便。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種克服上述問題或者至少部分地解決上述問題的json格式日志的生成方法及裝置。
根據(jù)本發(fā)明的一個方面,提供一種json格式日志的生成方法,包括:
s1,獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,并在日志操作包log4j中加載所述插件標(biāo)識對應(yīng)的插件;
s2,調(diào)用所述插件對配置文件進(jìn)行解析,以從所述配置文件中得到需要生成json格式字符串的字段信息;
s3,再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串,以便log4j將所述json格式的字符串生成對應(yīng)的json格式的日志。
本發(fā)明的有益效果為:對原有的log4j進(jìn)行擴(kuò)展,通過擴(kuò)展的插件可以將其它格式的字符串轉(zhuǎn)換為json格式的字符串,實現(xiàn)了對原有的log4j功能的擴(kuò)展,擴(kuò)展后的log4j能夠?qū)⑵渌袷降淖址蒵son格式的字符串,進(jìn)而生成json格式的日志。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以作如下改進(jìn)。
進(jìn)一步的,所述步驟s1之前還包括:
利用log4j原有的抽象父類創(chuàng)建一個抽象子類,所述抽象子類繼承所述抽象父類,用于將其它格式的字符串生成json格式的字符串;
將所述抽象子類作為log4j的插件。
進(jìn)一步的,所述步驟s1之前還包括:
在log4j中編寫配置文件,所述配置文件中包括插件調(diào)用事件對應(yīng)的插件標(biāo)識,以及與所述插件標(biāo)識對應(yīng)的插件的位置信息;
從而,所述步驟s1具體包括:
從所述配置文件中獲取插件標(biāo)識,根據(jù)該插件標(biāo)識對應(yīng)的插件的位置信息,查找到所述插件,并在log4j中加載所述插件。
進(jìn)一步的,所述配置文件中還包括有按照log4j支持的格式配置的字段信息,其中,所述字段信息包括字段名稱和字段名稱對應(yīng)的字段值。
進(jìn)一步的,所述步驟s2具體包括:
調(diào)用所述插件對所述配置文件中的字段信息進(jìn)行解析,將字段名稱作為鍵值,將字段值作為屬性值,以“鍵值-屬性值”的格式保存于數(shù)據(jù)表中。
進(jìn)一步的,所述步驟s2還包括:
當(dāng)所述字段名稱對應(yīng)的字段值使用占位符表示時,所述插件將所述占位符解析為實際的字段值。
進(jìn)一步的,所述步驟s3中再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串具體包括:
將解析出來的字段名稱和對應(yīng)的字段值添加到插件的抽象子類中,利用所述抽象子類生成json格式的字符串。
根據(jù)本發(fā)明的另一個方面,還提供了一種json格式日志的生成裝置,包括:
加載模塊,用于獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,并在log4j中加載所述插件標(biāo)識對應(yīng)的插件;
解析模塊,用于調(diào)用所述插件對配置文件進(jìn)行解析,以從所述配置文件中得到需要生成json格式字符串的字段信息;
生成模塊,用于再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串,以便log4j將所述json格式的字符串生成對應(yīng)的json格式的日志。
進(jìn)一步的,還包括編寫模塊;
所述編寫模塊,用于在log4j中編寫配置文件,所述配置文件中包括插件調(diào)用事件對應(yīng)的插件標(biāo)識,以及與所述插件標(biāo)識對應(yīng)的插件的位置信息;
從而,所述加載模塊具體用于:
從所述配置文件中獲取插件標(biāo)識,根據(jù)該插件標(biāo)識對應(yīng)的插件的位置信息,查找到所述插件,并在log4j中加載所述插件。
進(jìn)一步的,所述配置文件中的字段信息包括字段名稱和字段名稱對應(yīng)的字段值;
所述解析模塊具體用于:
調(diào)用所述插件對所述配置文件中的字段信息進(jìn)行解析,將字段名稱作為鍵值,將字段值作為屬性值,以“鍵值-屬性值”的格式保存于數(shù)據(jù)表中。
附圖說明
圖1為本發(fā)明一個實施例的json格式日志的生成方法流程圖;
圖2為本發(fā)明另一個實施例的json格式日志的生成裝置連接框圖;
圖3為本發(fā)明另一個實施例的json格式日志的生成裝置整體連接框圖;
圖4為本發(fā)明又一個實施例的json格式日志的生成裝置的測試設(shè)備連接框圖。
具體實施方式
下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式作進(jìn)一步詳細(xì)描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
參見圖1,為本發(fā)明一個實施例的json格式日志的生成方法,包括:s1,獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,并在日志操作包log4j中加載所述插件標(biāo)識對應(yīng)的插件;s2,調(diào)用所述插件對配置文件進(jìn)行解析,以從配置文件中得到需要生成json格式字符串的字段信息;s3,再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串,以便log4j將所述json格式的字符串生成對應(yīng)的json格式的日志。
由于目前l(fā)og4j只能將固定格式的字段信息生成json格式日志,而無法將外部傳入的其它格式的字段信息生成json格式的日志,這對于實際應(yīng)用來說是一個制約。因此,本實施例對已有的log4j進(jìn)行擴(kuò)展,對已有的log4j擴(kuò)展一個插件,該插件能夠?qū)⑵渌袷降淖址蒵son格式的字符串,進(jìn)而利用log4j原有的功能將得到的json格式的字符串生成對應(yīng)的json格式的日志。
在將其它格式的字符串生成json格式的字符串時,本實施例采取log4j中的插件來完成,因此首先需要在log4j中加載插件。首先獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,按照插件標(biāo)識在log4j中加載對應(yīng)的插件。然后使用插件對預(yù)先配置好的配置文件進(jìn)行解析,從配置文件中解析出需要生成json格式字符串的字段信息,其中,字段信息包括字段名稱和字段名稱對應(yīng)的字段值。再次調(diào)用插件,將解析出來的字段名稱和對應(yīng)的字段值生成對應(yīng)的json格式的字符串,以便通過log4j原有的功能將json格式的字符串生成對應(yīng)的json格式的日志,整個完成將其它格式的字符串通過擴(kuò)展后的log4j生成json格式的日志。
本實施例對原有的log4j進(jìn)行擴(kuò)展,通過擴(kuò)展的插件可以將其它格式的字符串轉(zhuǎn)換為json格式的字符串,以便讓log4j將其它格式的字符串生成json格式的日志,滿足在開發(fā)過程中的實際需求。
在本發(fā)明的一個實施例中,所述步驟s1之前還包括:利用log4j原有的抽象父類創(chuàng)建一個抽象子類,所述抽象子類繼承所述抽象父類,用于將其它格式的字符串生成json格式的字符串;將所述抽象子類作為log4j的插件。
在調(diào)用插件前,需要對log4j進(jìn)行擴(kuò)展,由于log4j的日志打印格式是由特定的類來定義的,均實現(xiàn)了org.apache.logging.log4j.core.layout.layout這個接口,所以本實施例可以通過實現(xiàn)該接口來進(jìn)行擴(kuò)展。在原有的log4j中已經(jīng)有一個定義好的抽象類abstractstringlayout,該抽象類是生成字符串日志格式的抽象父類,而json串其實是一個特殊格式的字符串,因此可以通過繼承該抽象父類,來創(chuàng)建一個抽象子類,代碼如下:
通過上述創(chuàng)建的抽象子類可以將其它格式的字符串生成json格式的字符串。隨后將該抽象子類擴(kuò)展為log4j的插件,具體的實現(xiàn)如下:
@plugin(name="jobjsonlayout",category=node.category,
elementtype="layout",printobject=true)。
其中,name表示該插件的名稱為jobjsonlayout,elementtype表示該插件的配置類型為layout。
在本發(fā)明的另一個實施例中,所述步驟s1之前還包括:在log4j中編寫配置文件,所述配置文件中包括插件調(diào)用事件對應(yīng)的插件標(biāo)識,以及與所述插件標(biāo)識對應(yīng)的插件的位置信息;所述步驟s1具體包括:從所述配置文件中獲取插件標(biāo)識,并根據(jù)該插件標(biāo)識對應(yīng)的插件的位置信息,從內(nèi)存中查找到該插件,并在log4j中加載該插件。
在執(zhí)行上述步驟s1之前,需要在log4j中編寫配置文件,配置文件的代碼如下:
由上述代碼可知,配置文件中指定了插件調(diào)用事件對應(yīng)的插件標(biāo)識,還需要在配置文件中指定插件標(biāo)識對應(yīng)的插件的位置??梢詮呐渲梦募械玫绞欠裥枰{(diào)用插件,具體調(diào)用哪個插件,當(dāng)需要對插件進(jìn)行調(diào)用時,根據(jù)配置文件中配置的插件標(biāo)識,按照該插件標(biāo)識對應(yīng)的插件的位置去加載插件。其中,配置文件中還包括有按照log4j支持的格式配置的需要生成json格式字符串的字段信息,其中,所述字段信息包括字段名稱和字段名稱對應(yīng)的字段值。代碼中jobjsonlayout為需要調(diào)用的插件的標(biāo)識,配置文件中的columnname1、columnname2和columnname3為字段信息的字段名稱,value1、${ocean.job.pid}和value3為columnname1、columnname2和columnname3分別對應(yīng)的字段值,其中,${ocean.job.pid}是使用占位符表示的字段值。配置文件中的每一個字段信息的格式為<字段名稱>字段值</字段名稱>。另外,在配置文件中還定義在最后生成json格式的日志時,是否需要寫入日志的基本信息,其中,日志的基本信息包括日志的名稱、日志中線程的名稱、線程id以及線程的優(yōu)先級。
在本發(fā)明的一個實施例中,所述步驟s2具體包括:調(diào)用所述插件對所述配置文件中的字段信息進(jìn)行解析,將字段名稱作為鍵值,將字段值作為屬性值,以“鍵值-屬性值”得格式保存于數(shù)據(jù)表中。
上述在log4j中編寫了配置文件后,調(diào)用log4j中加載的插件對配置文件進(jìn)行解析,從配置文件中解析出其中配置的字段信息,這些字段信息后續(xù)會生成json格式的字符串,將字段信息中的字段名稱columnname作為主鍵,字段名稱對應(yīng)的字段值value作為屬性值存儲于數(shù)據(jù)表中。其中,當(dāng)字段名稱對應(yīng)的字段值使用占位符表示時,可以使用log4j配置所提供的工具類將占位符解析為實際的字段值。
在本發(fā)明的一個實施例中,所述步驟s3中再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串具體包括:將解析出來的字段名稱和對應(yīng)的字段值添加到插件的抽象子類中,利用所述抽象子類生成json格式的字符串。
上述實施例將配置文件中的字段信息解析出來后,本實施例將解析出來的字段名稱和字段值對應(yīng)添加到前述創(chuàng)建的抽象子類中,利用該抽象子類將填入的字段名稱和對應(yīng)的字段值生成json格式的字符串。本實施例中利用log4j中現(xiàn)有的工具類對占位符所代表的實際字段值進(jìn)行解析,增強(qiáng)了耦合性,提高了解析過程的效率和穩(wěn)定性。另外,可以靈活地解析配置文件中的字符串常量和占位符所對應(yīng)的字段值,使得配置可以更加靈活多變,配置的字段值不僅限于固定的值。
調(diào)用插件中的抽象子類將其它格式的字段信息轉(zhuǎn)換成了json格式的字符串,此時log4j可以根據(jù)現(xiàn)有的功能將轉(zhuǎn)換好的json格式的字符串生成對應(yīng)的json格式的日志。在將json格式的字符串生成json格式的日志時,判斷配置文件中是否定義了需要寫入日志的基本信息,如果需要,則在生成的json格式的日志中寫入日志的基本信息。
參見圖2,為本發(fā)明另一個實施例的json格式日志的生成裝置,包括加載模塊21、解析模塊22和生成模塊23。
加載模塊21,用于獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,并在log4j中加載所述插件標(biāo)識對應(yīng)的插件;
解析模塊22,用于調(diào)用所述插件對配置文件進(jìn)行解析,以從配置文件中得到需要生成json格式字符串的字段信息;
生成模塊23,用于再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串,以便log4j將所述json格式的字符串生成對應(yīng)的json格式的日志。
參見圖3,json格式日志的生成裝置還包括創(chuàng)建模塊20和編寫模塊24,所述創(chuàng)建模塊20,用于利用log4j原有的抽象父類創(chuàng)建一個抽象子類,所述抽象子類繼承所述抽象父類,用于將其它格式的字符串生成json格式的字符串;將所述抽象子類作為log4j的插件。
編寫模塊24,用于在log4j中編寫配置文件,所述配置文件中包括插件調(diào)用事件對應(yīng)的插件標(biāo)識,以及與所述插件標(biāo)識對應(yīng)的插件的位置信息。
所述加載模塊21具體用于,從所述配置文件中獲取插件標(biāo)識,根據(jù)該插件標(biāo)識對應(yīng)的插件的位置信息,查找到該插件,并在log4j中加載所述插件。其中,配置文件中還包括有按照log4j支持的格式配置的字段信息,其中,所述字段信息包括字段名稱和字段名稱對應(yīng)的字段值。
所述解析模塊22,具體用于:
調(diào)用所述插件對所述配置文件中的字段信息進(jìn)行解析,將字段名稱作為鍵值,將字段值作為屬性值,以“鍵值-屬性值”的格式保存于數(shù)據(jù)表中。其中,當(dāng)字段名稱對應(yīng)的字段值使用占位符表示時,將占位符解析為實際的字段值。
所述生成模塊23具體用于:
將所述解析模塊22解析出來的字段名稱和對應(yīng)的字段值添加到插件的抽象子類中,利用抽象子類生成json格式的字符串,以便log4j將json格式的字符串生成對應(yīng)的json格式的日志。
基于上述圖2和圖3對應(yīng)實施例所提供的json格式日志的生成裝置,本發(fā)明還提供了一種json格式日志的生成裝置的測試設(shè)備。參見圖4,該json格式日志的生成裝置的測試設(shè)備包括:處理器(processor)401、存儲器(memory)402、通信接口(communicationsinterface)403和總線404;
其中,處理器401、存儲器402及通信接口403分別通過總線404完成相互間的通信;
通信接口403用于該測試設(shè)備與json格式日志的生成裝置的通信設(shè)備之間的信息傳輸;
處理器401用于調(diào)用存儲器402中的程序指令,以執(zhí)行上述圖1對應(yīng)實施例所提供的json格式日志的生成方法,例如包括:獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,并在log4j中加載所述插件標(biāo)識對應(yīng)的插件;調(diào)用所述插件對配置文件進(jìn)行解析,以從配置文件中得到需要生成json格式字符串的字段信息;再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串,以便log4j將所述json格式的字符串生成對應(yīng)的json格式的日志。
本發(fā)明公開一種計算機(jī)程序產(chǎn)品,該計算機(jī)程序產(chǎn)品包括存儲在非暫態(tài)計算機(jī)可讀存儲介質(zhì)上的計算機(jī)程序,該計算機(jī)程序包括程序指令,當(dāng)程序指令被計算機(jī)執(zhí)行時,計算機(jī)能夠執(zhí)行上述圖1對應(yīng)實施例所提供的json格式日志的生成方法,例如包括:獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,并在log4j中加載所述插件標(biāo)識對應(yīng)的插件;調(diào)用所述插件對配置文件進(jìn)行解析,以從配置文件中得到需要生成json格式字符串的字段信息;再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串,以便log4j將所述json格式的字符串生成對應(yīng)的json格式的日志。
本發(fā)明提供一種非暫態(tài)計算機(jī)可讀存儲介質(zhì),該非暫態(tài)計算機(jī)可讀存儲介質(zhì)存儲計算機(jī)指令,該計算機(jī)指令使計算機(jī)執(zhí)行上述圖1對應(yīng)實施例所提供的json格式日志的生成方法,例如包括:獲取插件調(diào)用事件對應(yīng)的插件標(biāo)識,并在log4j中加載所述插件標(biāo)識對應(yīng)的插件;調(diào)用所述插件對配置文件進(jìn)行解析,以從配置文件中得到需要生成json格式字符串的字段信息;再次調(diào)用所述插件,將所述字段信息生成對應(yīng)的json格式的字符串,以便log4j將所述json格式的字符串生成對應(yīng)的json格式的日志。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成,前述的程序可以存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,執(zhí)行包括上述方法實施例的步驟;而前述的存儲介質(zhì)包括:rom、ram、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所描述的json格式日志的生成裝置的測試設(shè)備等實施例僅僅是示意性的,其中作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部模塊來實現(xiàn)本實施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性的勞動的情況下,即可以理解并實施。
通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到各實施方式可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件?;谶@樣的理解,上述技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機(jī)軟件產(chǎn)品可以存儲在計算機(jī)可讀存儲介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺計算機(jī)設(shè)備(可以是個人計算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行各個實施例或者實施例的某些部分方法。
本發(fā)明提供的一種json格式日志的生成方法及裝置,對原有的log4j進(jìn)行擴(kuò)展,通過擴(kuò)展的插件可以將其它格式的字符串轉(zhuǎn)換為json格式的字符串,實現(xiàn)了對原有的log4j功能的擴(kuò)展,擴(kuò)展后的log4j能夠?qū)⑵渌袷降淖址蒵son格式的字符串,進(jìn)而生成json格式的日志。
最后,本申請的方法僅為較佳的實施方案,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。