專利名稱:一種日志服務(wù)處理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及日志服務(wù)技術(shù)領(lǐng)域,尤其涉及一種日志服務(wù)處理方法及裝置。
背景技術(shù):
OSGi (公共服務(wù)平臺,open Service Gateway Initiative)是一個基于 Java 的服務(wù)規(guī)范,它是為那些需要長時間運行,動態(tài)更新并且對運行環(huán)境的影響盡可能小的系統(tǒng)制定的。并且,OSGi向Java提供服務(wù),這些服務(wù)使Java成為軟件集成和軟件開發(fā)的首選環(huán)境。其中,OSGi聯(lián)盟已經(jīng)開發(fā)了例如日志、安全等很多公共功能的標準組件接口。目前的日志服務(wù)只有SLF4J是能夠運行到OSGi中的日志插件。基于OSGi的Java應(yīng)用程序能夠應(yīng)用該日志服務(wù)。而常見的另外一些日志服務(wù)如java.util, logging、simpleLogger, log4j等卻不能運行到OSGi中,所以也就不能被基于OSGi的Java應(yīng)用程序應(yīng)用。因此,急需一種日志服務(wù)處理方法,將不基于OSGi的日志服務(wù)轉(zhuǎn)換為基于OSGi的日志服務(wù),進一步使基于OSGi的Java應(yīng)用程序能夠通過一種通用的日志接口調(diào)用轉(zhuǎn)換后的日志服務(wù)。
發(fā)明內(nèi)容
為解決上述技術(shù)問題,本申請實施例提供一種日志服務(wù)處理方法,以達到集成多種類型的日志服務(wù)的目的,技術(shù)方案如下:一種日志服務(wù)處理方法,包括:在組件啟動后,傳遞所述組件的上下文對象到非公共服務(wù)平臺OSGi類型日志的工廠;保存所述組件的上下文對象到所述非OSGi類型日志的工廠;判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù);在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)已注冊的情況下,返回所述OSGi類型日志服務(wù);在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)。優(yōu)選的,判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)包括:根據(jù)日志讀取服務(wù)接口 LogReaderService判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù);所述日志讀取服務(wù)接口 LogReaderServic根據(jù)日志的類型和版本號判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)。優(yōu)選的,在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)包括:
判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否存在于公共服務(wù)平臺OSGi中;在非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未存在于公共服務(wù)平臺OSGi中的情況下,添加所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)并將所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊為OSGi類型日志服務(wù);在非OSGi類型日志的工廠對應(yīng)的日志服務(wù)存在于公共服務(wù)平臺OSGi中的情況下,將所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊為OSGi類型日志服務(wù)。優(yōu)選的,還包括:導(dǎo)出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)的接口,所述接口攜帶有版本號。優(yōu)選的,還包括:在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后,在輸出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)記錄的日志消息時,日志監(jiān)聽器接口 LogListener發(fā)送日志條目接口 LogEntry類型的日志條目至日志服務(wù)接口 LogService,獲取所述日志條目接口LogEntry對象對應(yīng)的日志消息;還包括:在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后,以純服務(wù)的方式或者以嵌入的方式加載所述日志服務(wù)。一種日志服務(wù)處理裝置,包括:傳遞單元,用于在組件啟動后,傳遞所述組件的上下文對象到非公共服務(wù)平臺OSGi類型日志的工廠;存儲單元,用于保存?zhèn)鬟f單元傳遞的組件的上下文對象到所述非OSGi類型日志的工廠;第一判斷單元,用于判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù);返回單元,用于在第一判斷單元的判斷結(jié)果為所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)已注冊的情況下,返回所述OSGi類型日志服務(wù);第一注冊單元,用于在第一判斷單元的判斷結(jié)果為所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)。優(yōu)選的,第一判斷單元具體用于根據(jù)日志讀取服務(wù)接口 LogReaderService判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù);第一判斷單元具體用于根據(jù)日志的類型和版本號判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)。優(yōu)選的,第一注冊單元包括:第二判斷單元、添加單元和第二注冊單元;其中,第二判斷單元,用于判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否存在于公共服務(wù)平臺OSGi中;添加單元,用于在第二判斷單元的判斷結(jié)果為非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未存在于公共服務(wù)平臺OSGi中的情況下,添加所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù);第二注冊單元,用于注冊所述添加單元添加的非OSGi類型日志的工廠對應(yīng)的日志服務(wù)或用于在第二判斷單元的判斷結(jié)果為非OSGi類型日志的工廠對應(yīng)的日志服務(wù)存在于公共服務(wù)平臺OSGi中的情況下,注冊所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)。優(yōu)選的,還包括:導(dǎo)出單元,用于導(dǎo)出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)的接口,所述導(dǎo)出單元具體用于導(dǎo)出攜帶有版本號的所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)的接□。優(yōu)選的,還包括:處理單元,用于在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后,在輸出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)記錄的日志消息時,日志監(jiān)聽器接口LogListener發(fā)送日志條目接口 LogEntry類型的日志條目至日志服務(wù)接口 LogService,獲取所述日志條目接口 LogEntry對象對應(yīng)的日志消息;還包括:加載單元,用于在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后,以純服務(wù)的方式或者以嵌入的方式加載所述日志服務(wù)。與現(xiàn)有技術(shù)相比,本申請的有益效果是:在本申請中,在OSGi中可以創(chuàng)建非OSGi類型的日志服務(wù)并在OSGi中注冊該非OSGi類型的日志服務(wù),將該非OSGi類型的日志服務(wù)轉(zhuǎn)換為基于OSGi的日志服務(wù),達到集成多種類型的日志服務(wù)的目的,集成多種類型日志服務(wù)后,可以滿足基于OSGi的不同Java應(yīng)用程序根據(jù)自己需求選擇適合自己的日志服務(wù)并對其進行應(yīng)用的要求。
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本申請?zhí)峁┑囊环N日志服務(wù)處理方法的一種流程圖;圖2是本申請?zhí)峁┑囊环N日志服務(wù)處理方法中將未注冊的日志服務(wù)注冊為OSGi類型日志服務(wù)的一種流程圖;圖3是本申請?zhí)峁┑囊环N日志服務(wù)處理方法的另一種流程圖;圖4a是本申請?zhí)峁┑囊环N日志服務(wù)處理裝置的一種結(jié)構(gòu)示意圖;圖4b是本申請?zhí)峁┑囊环N日志服務(wù)處理裝置中第一注冊單元的具體組成的一種結(jié)構(gòu)示意圖;圖5是本申請?zhí)峁┑囊环N日志服務(wù)處理裝置的另一種結(jié)構(gòu)示意圖。
具體實施例方式
下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
本申請?zhí)峁┮环N日志服務(wù)處理方法,首先在組件啟動后,傳遞所述組件的上下文對象到非公共服務(wù)平臺OSGi類型日志的工廠,其次保存所述組件的上下文對象到所述非OSGi類型日志的工廠,然后判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù),在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)已注冊的情況下,返回所述OSGi類型日志服務(wù),在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)。以下將列舉實施例對本申請?zhí)峁┑囊环N日志服務(wù)處理方法進行詳細說明。一個實施例請參閱圖1,其示出了本申請?zhí)峁┑囊环N日志服務(wù)處理方法的一種流程圖,可以包括以下步驟:步驟Sll:在組件啟動后,傳遞所述組件的上下文對象到非公共服務(wù)平臺OSGi類型日志的工廠。在本實施例中,啟動公共服務(wù)平臺OSGi中的組件后,將公共服務(wù)平臺OSGi中的組件的上下文對象傳遞到非公共服務(wù)平臺OSGi類型日志的工廠。在接收公共服務(wù)平臺OSGi中的組件的上下文對象后,非公共服務(wù)平臺OSGi類型日志的工廠對應(yīng)的日志服務(wù)就可以通過上下文對象注冊為OSGi類型日志服務(wù)或者從OSGi類型日志服務(wù)中讀取該非公共服務(wù)平臺OSGi類型日志的工廠對應(yīng)的日志服務(wù)。在將公共服務(wù)平臺OSGi中的組件的上下文對象傳遞到非公共服務(wù)平臺OSGi類型日志的工廠后,執(zhí)行步驟S12。非公共服務(wù)平臺OSGi類型日志的工廠對應(yīng)的日志服務(wù)可以使用公共服務(wù)平臺OSGi中的組件以實現(xiàn)日志服務(wù)功能。步驟S12:保存所述組件的上下文對象到所述非OSGi類型日志的工廠。在非OSGi類型日志的工廠接收到公共服務(wù)平臺OSGi中的組件的上下文對象后,保存該公共服務(wù)平臺OSGi中的組件的上下文對象。步驟S13:判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)。判斷非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)原因為:基于公共服務(wù)平臺OSGi的應(yīng)用程序使用日志服務(wù)時,必須使用OSGi類型日志服務(wù),即使用注冊在公共服務(wù)平臺OSGi中的日志服務(wù)。如果非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊在公共服務(wù)平臺OSGi中,非OSGi類型日志的工廠對應(yīng)的日志服務(wù)便不能使用公共服務(wù)平臺OSGi提供的日志服務(wù)功能的組件,即該非OSGi類型日志的工廠對應(yīng)的日志服務(wù)并不會在公共服務(wù)平臺OSGi中運行。則進一步如果基于公共服務(wù)平臺OSGi的應(yīng)用程序使用該非OSGi類型日志的工廠對應(yīng)的日志服務(wù)時,基于公共服務(wù)平臺OSGi的應(yīng)用程序不會得到該公共服務(wù)平臺OSGi的應(yīng)用程序運行過程中記錄的日志。其中公共服務(wù)平臺OSGi提供服務(wù)注冊的功能,以實現(xiàn)將非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊為OSGi類型日志服務(wù)。在本實施例中,判斷非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)可以根據(jù)日志讀取服務(wù)接口 LogReaderService判斷。其中日志讀取服務(wù)接口 LogReaderService判斷非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)的具體過程為:根據(jù)日志讀取服務(wù)接口 LogReaderService的名稱查找日志讀取
服務(wù)接口 LogReaderService對應(yīng)的服務(wù)的服務(wù)引用對象;在判斷該服務(wù)對象不為空時,從
非OSGi類型日志的工廠中保存的上下文對象中獲取日志讀取服務(wù)接口 LogReaderService
類型的對象;使用日志讀取服務(wù)接口 LogReaderService定義的getlog ()檢索日志讀取服
務(wù)接口 LogReaderService類型的對象對應(yīng)的日志條目,在檢索到的日志條目中如果包括
該非OSGi類型日志的工廠對應(yīng)的日志服務(wù),則說明該非OSGi類型日志的工廠對應(yīng)的日志
服務(wù)已注冊,否則,說明該非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊。判斷過程可以
由如下代碼實現(xiàn),代碼為:Servic.eReferenc.eref=
權(quán)利要求
1.一種日志服務(wù)處理方法,其特征在于,包括: 在組件啟動后,傳遞所述組件的上下文對象到非公共服務(wù)平臺OSGi類型日志的工廠; 保存所述組件的上下文對象到所述非OSGi類型日志的工廠; 判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù); 在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)已注冊的情況下,返回所述OSGi類型日志服務(wù); 在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)包括: 根據(jù)日志讀取服務(wù)接口 LogReaderService判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù); 所述日志讀取服務(wù)接口 LogReaderServic根據(jù)日志的類型和版本號判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)包括: 判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否存在于公共服務(wù)平臺OSGi中; 在非OSGi類型日志 的工廠對應(yīng)的日志服務(wù)未存在于公共服務(wù)平臺OSGi中的情況下,添加所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)并將所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊為OSGi類型日志服務(wù); 在非OSGi類型日志的工廠對應(yīng)的日志服務(wù)存在于公共服務(wù)平臺OSGi中的情況下,將所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊為OSGi類型日志服務(wù)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 導(dǎo)出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)的接口,所述接口攜帶有版本號。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后,在輸出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)記錄的日志消息時,日志監(jiān)聽器接口 LogListener發(fā)送日志條目接口 LogEntry類型的日志條目至日志服務(wù)接口 LogService,獲取所述日志條目接口LogEntry對象對應(yīng)的日志消息; 所述方法還包括:在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后,以純服務(wù)的方式或者以嵌入的方式加載所述日志服務(wù)。
6.一種日志服務(wù)處理裝置,其特征在于,包括: 傳遞單元,用于在組件啟動后,傳遞所述組件的上下文對象到非公共服務(wù)平臺OSGi類型日志的工廠; 存儲單元,用于保存?zhèn)鬟f單元傳遞的組件的上下文對象到所述非OSGi類型日志的工廠; 第一判斷單元,用于判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù); 返回單元,用于在第一判斷單元的判斷結(jié)果為所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)已注冊的情況下,返回所述OSGi類型日志服務(wù); 第一注冊單元,用于在第一判斷單元的判斷結(jié)果為所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,第一判斷單元具體用于根據(jù)日志讀取服務(wù)接口 LogReaderService判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù); 第一判斷單元具體用于根據(jù)日志的類型和版本號判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù)。
8.根據(jù)權(quán)利要求6所述的裝置,其特征在于,第一注冊單元包括:第二判斷單元、添加單元和第二注冊單元; 其中,第二判斷單元,用于判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否存在于公共服務(wù)平臺OSGi中; 添加單元,用于在第二判斷單元的判斷結(jié)果為非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未存在于公共服務(wù)平臺OSGi中的情況下,添加所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù); 第二注冊單元,用于注冊所述添加單元添加的非OSGi類型日志的工廠對應(yīng)的日志服務(wù)或用于在第二判斷單元的判斷結(jié)果為非OSGi類型日志的工廠對應(yīng)的日志服務(wù)存在于公共服務(wù)平臺OSGi中的情況下,注冊所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)。
9.根據(jù)權(quán)利要求6所述的裝置,其特征在于,還包括: 導(dǎo)出單元,用于導(dǎo)出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)的接口,所述導(dǎo)出單元具體用于導(dǎo)出攜帶有版本號的所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)的接口。
10.根據(jù)權(quán)利要求6所述的裝置,其特征在于,還包括: 處理單元,用于在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后,在輸出所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)記錄的日志消息時,日志監(jiān)聽器接口 LogListener發(fā)送日志條目接口 LogEntry類型的日志條目至日志服務(wù)接口 LogService,獲取所述日志條目接口 LogEntry對象對應(yīng)的日志消息; 所述裝置,還包括: 加載單元,用于在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)注冊后, 以純服務(wù)的方式或者以嵌入的方式加載所述日志服務(wù)。
全文摘要
本申請?zhí)峁┝艘环N日志服務(wù)處理方法,包括在組件啟動后,傳遞所述組件的上下文對象到非公共服務(wù)平臺OSGi類型日志的工廠;保存所述組件的上下文對象到所述非OSGi類型日志的工廠;判斷所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)是否已注冊為OSGi類型日志服務(wù);在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)已注冊的情況下,返回所述OSGi類型日志服務(wù);在所述非OSGi類型日志的工廠對應(yīng)的日志服務(wù)未注冊的情況下,將所述日志服務(wù)注冊為OSGi類型日志服務(wù)。因此,本申請能夠集成多種類型的日志服務(wù),集成多種類型日志服務(wù)后,可以滿足基于OSGi的不同Java應(yīng)用程序根據(jù)自己需求選擇適合自己的日志服務(wù)并對其進行應(yīng)用的要求。
文檔編號H04L12/24GK103095491SQ201210583988
公開日2013年5月8日 申請日期2012年12月30日 優(yōu)先權(quán)日2012年12月30日
發(fā)明者張權(quán), 劉鵬, 尚秀穎, 李峰, 張青 申請人:山東中創(chuàng)軟件商用中間件股份有限公司