專利名稱:一種多線程日志記錄方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于業(yè)務(wù)處理邏輯應(yīng)用系統(tǒng)領(lǐng)域,特別涉及一種多線程日志記錄方 法及裝置。
背景技術(shù):
在應(yīng)用系統(tǒng)中為了方便開發(fā)人員查找問題,通常在業(yè)務(wù)處理邏輯(如一個 應(yīng)用程序)中的關(guān)鍵邏輯步驟處編寫日志文件,業(yè)務(wù)處理邏輯在處理業(yè)務(wù)的過 程中形成多線程,(線程是業(yè)務(wù)處理邏輯中一個單一的順序控制流程,在單個 業(yè)務(wù)處理邏輯中同時運(yùn)行多個線程完成不同的工作,稱為多線程)在關(guān)鍵邏輯 步驟會將處理結(jié)果記錄到日志文件中。如此,當(dāng)業(yè)務(wù)出現(xiàn)問題時,開發(fā)人員可 以通過查詢?nèi)罩疚募泶_定是哪一個步驟出現(xiàn)問題,比較節(jié)省時間。但是一直
一來有個問題總是困擾著開發(fā)人員 一塊完整的業(yè)務(wù)處理邏輯需要記錄每一步 處理結(jié)果,從而形成一個連續(xù)的日志文檔,目前業(yè)務(wù)處理邏輯中的日志記錄方 法通常是業(yè)務(wù)處理代碼調(diào)用日志記錄模塊的日志記錄接口,日志記錄模塊接收 到請求后,立即將日志內(nèi)容寫入到日志文件中產(chǎn)生日志記錄。但是當(dāng)日志記錄 模塊接收到多個并發(fā)請求時,往往多個請求的處理結(jié)果混淆在一起,比如兩個 線程(T1及T2)同時處理,每個線程對應(yīng)有5個關(guān)鍵步驟,對應(yīng)每個線程就會 產(chǎn)生5個日志記錄(blogl, blog2 , blog3...…),現(xiàn)有日志文件中各線程的記錄可 能全部交錯在一起(Tlblogl, T2blogl , Tlblog2 , T2blog2 , Tllog3 , T2blog3……),這樣非常不利于日后開發(fā)人員查找問題。
發(fā)明內(nèi)容
為了解決現(xiàn)有技術(shù)中,現(xiàn)有日志文件中各線程的記錄可能全部交錯在一起的問題,本發(fā)明實施例提供了一種多線程日志記錄方法,包括
將至少部分線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲;
所述至少部分線程中的線程處理完成后,將單獨(dú)存儲的線程對應(yīng)的日志內(nèi) 容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄。
同時本發(fā)明實施例還提供一種多線程日志記錄方法,包括
將至少部分線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲;
將單獨(dú)存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各線程所對應(yīng)的日志文 件中。
同時本發(fā)明實施例還提供一種多線程日志記錄裝置,包括 存儲模塊用于單獨(dú)存儲至少部分線程中各線程所對應(yīng)的日志內(nèi)容; 第一寫模塊用于所述至少部分線程中的線程處理完成后,將單獨(dú)存儲的
線程對應(yīng)的日志內(nèi)容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄。
同時本發(fā)明實施例還提供一種多線程日志記錄裝置,包括 存儲模塊用于單獨(dú)存儲至少部分線程中各線程所對應(yīng)的日志內(nèi)容; 第二寫模塊用于將單獨(dú)存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各線程 所對應(yīng)的日志文件中。
由上述本發(fā)明提供的具體實施方案可以看出,正是至少部分線程中各線程 所對應(yīng)的日志內(nèi)容單獨(dú)存儲,至少部分線程中的線程處理完成后,將單獨(dú)存儲 的線程對應(yīng)的日志內(nèi)容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記 錄,因此被集中記錄的日志內(nèi)容在日志文件中,不會再出現(xiàn)和其他線程的日志 記錄交錯的。
圖1為本發(fā)明提供的第一實施例方法流程圖; 圖2為本發(fā)明提供的第二實施例方法流程6圖3為本發(fā)明提供的第三實施例裝置結(jié)構(gòu)圖 圖4為本發(fā)明提供的第四實施例裝置結(jié)構(gòu)圖。
具體實施例方式
本發(fā)明提供的第一實施例是一種多線程日志記錄方法,三個線程(T1、 T2 及T3)同時處理,每個線程對應(yīng)有3個關(guān)鍵步驟,對應(yīng)每個線程就會產(chǎn)生3個日 志記錄(blogl, blog2 , blog3),方法流程如圖l所示,包括
步驟102:在內(nèi)存中的A地址空間對應(yīng)的存儲空間中,單獨(dú)存儲T1線程對 應(yīng)的日志內(nèi)容。
步驟104:當(dāng)T1線程處理完成后,將A地址空間對應(yīng)的存儲空間中存儲的 所有日志內(nèi)容一起寫到20080808.1og日志文件中,此時T1線程產(chǎn)生3個日志記 錄Tlblogl, Tlblog2 , Tlblog3,并會連續(xù)的記錄在20080808.1og日志文件中。
在步驟104中,日志記錄模塊接收到請求后,可以立即將對應(yīng)T2線程產(chǎn)生 的3個日志記錄T2blogl, T2blog2 , T2blog3,及對應(yīng)T3線程產(chǎn)生的3個日志記 錄T3blogl, T3blog2, T3blog3,寫入到20080808.1og日志文件中,這樣對應(yīng) T2及T3線程產(chǎn)生的6個日志記錄會交錯(T3blogl, T2blogl , T3blog2 , T2blog2 , T3blog3, T2blog3 ),最終20080808.1og日志文件中的日志記錄為 T3blogl, T2blogl, T3blog2 , T2blog2 , T3blog3 , T2blog3 , Tlblogl , Tlblog2 , Tlblog3 (根據(jù)實際情況還可以是T3blogl, T2blogl , T3blog2 , T2blog2 ,Tlblogl , Tlblog2 , Tlblog3 , T3blog3 , T2blog3等,其中Tlblogl, Tlblog2 , Tlblog3被集中記錄,本方案中所說的集中記錄是指在Tlblogl, Tlblog2 , Tlblog3之間沒有其它的日志記錄,但中間可以包括如空行等日志 記錄時所需的內(nèi)容)。
或者在步驟102中,在內(nèi)存中的B地址空間對應(yīng)的存儲空間中,單獨(dú)存儲 T2線程對應(yīng)的日志內(nèi)容;在內(nèi)存中的C地址空間對應(yīng)的存儲空間中,單獨(dú)存儲 T3線程對應(yīng)的日志內(nèi)容。在步驟104中,當(dāng)T1、 T2、 T3線程處理完成后,先將A地址空間對應(yīng)的存儲空間中存儲的日志內(nèi)容,再將B地址空間對應(yīng)的存儲空 間中存儲的日志內(nèi)容,最后將C地址空間對應(yīng)的存儲空間中存儲的日志內(nèi)容, 寫到20080808.1og日志文件中,此時T1線程產(chǎn)生的日志記錄Tlblogl, Tlblog2 , Tlblog3, T2線程產(chǎn)生的3個日志記錄T2blogl, T2blog2 , T2blog3,以及T3線 程產(chǎn)生的3個日志記錄T31blogl, T3blog2 , T3blog3,就會連續(xù)的記錄在 20080808.log日志文件中,最終在20080808.1og日志文件中被記錄的日志記錄 為Tlblogl, Tlblog2 , Tlblog3 , T2blogl, T2blog2 , T2blog3 , T31blogl, T3blog2 , T3blog3 (寫的順序為C、 A、 B則T3blogl, T3blog2 , T3blog3, Tlblogl, Tlblog2 , Tlblog3 , T2blogl, T2blog2 , T2blog3)。
可以看出,通過本實施例的方案,至少其中20080808—A.log日志文件中T1 線程產(chǎn)生3個日志記錄Tlblogl, Tlblog2 , Tlblog3會被集中的記錄,方便日 后開發(fā)人員查找T1線程。
本發(fā)明提供的第二實施例是一種多線程日志記錄方法,三個線程(T1、 T2 及T3)同時處理,每個線程對應(yīng)有3個關(guān)鍵步驟,對應(yīng)每個線程就會產(chǎn)生3個日 志記錄(blogl, blog2 , blog3),方法流程如圖2所示,包括
步驟202:在內(nèi)存中的A地址空間對應(yīng)的存儲空間中,單獨(dú)存儲T1線程對 應(yīng)的曰志內(nèi)容。
步驟204:將A地址空間對應(yīng)的存儲空間中的日志內(nèi)容單獨(dú)寫到 20080808—A.log日志文件(Tlblogl, Tlblog2 , Tllog3)中。即20080808—A.log 中只存和T1線程對應(yīng)的日志記錄。
在步驟202中,在內(nèi)存中的B地址空間對應(yīng)的存儲空間中,存儲業(yè)務(wù)處理 邏輯中的T2線程產(chǎn)生的日志內(nèi)容,在內(nèi)存中的C地址空間對應(yīng)的存儲空間中, 存儲業(yè)務(wù)處理邏輯中的T3線程產(chǎn)生的日志內(nèi)容。
在步驟204中,將B地址空間對應(yīng)的存儲空間中的日志內(nèi)容單獨(dú)寫到 20080808—B.log日志文件(日志記錄T2blogl, T2blog2 , T21og3會連續(xù)的記錄 在20080808—B.log日志文件中)中,將C地址空間對應(yīng)的存儲空間中的日志內(nèi)容單獨(dú)寫到20080808—C.log日志文件(日志記錄T3blogl, T3blog2, T31og3 會連續(xù)的記錄在20080808_(:.1(^日志文件中)中。
其中,步驟204可以是線程處理完成后,將地址空間對應(yīng)的存儲空間中的 曰志內(nèi)容寫到日志文件中,也可以是在線程處理過程中,以時間或地址空間對 應(yīng)的存儲空間中存儲的日志內(nèi)容信息的大小為依據(jù),從地址空間對應(yīng)的存儲空 間中讀取日志內(nèi)容并寫到日志文件中。例如,根據(jù)預(yù)先設(shè)定的每1秒就從A地 址空間對應(yīng)的存儲空間中讀取T1線程產(chǎn)生的日志內(nèi)容,并寫到20080808—A.log 日志文件中,根據(jù)B地址空間對應(yīng)的存儲空間(1MB)中存儲的日志內(nèi)容信息 大于預(yù)先設(shè)定的300KB,從B地址空間對應(yīng)的存儲空間中讀取T2線程產(chǎn)生的日 志內(nèi)容,并寫到20080808—B.log日志文件中。
根據(jù)實際情況,還可以是T1線程產(chǎn)生的日志記錄按本實施例中的上述方 法單獨(dú)寫到20080808一A.log日志文件中。對于T2線程、T3線程,日志記錄才莫塊 接收到請求后,可以立即將對應(yīng)T2線程產(chǎn)生的3個日志記錄T2blogl , T2blog2 , T2blog3,及對應(yīng)T3線程產(chǎn)生的3個日志記錄T3blogl, T3blog2 , T3blog3,寫 入到20080808—BC.log日志文件中,此時T2線程、T3線程產(chǎn)生的日志記錄會交 錯T3blogl, T2blogl , T3blog2 , T2blog2 , T3blog3, T2blog3。當(dāng)各線程 處理完成后,將20080808—A.log日志文件和20080808—BC.log日志文件合并為 20080808.log。
在步驟202之前,業(yè)務(wù)處理邏輯在處理業(yè)務(wù)的過程中要處理T1線程,首先 要確定是否已經(jīng)為T1線程分配了日志內(nèi)容存儲空間,如果沒有T1線程的日志 內(nèi)容存儲空間,那么在內(nèi)存中創(chuàng)建一個地址空間為A的存儲空間,這樣,就可 以在內(nèi)存中的A地址空間對應(yīng)的存儲空間中,存儲業(yè)務(wù)處理邏輯中的T1線程產(chǎn) 生的日志內(nèi)容。
本發(fā)明提供的第三實施例是一種多線程日志記錄裝置,其結(jié)構(gòu)如圖3所示, 包括
存儲模塊302:用于單獨(dú)存儲至少部分線程中各線程所對應(yīng)的日志內(nèi)容;
9第一寫模塊304:用于所述至少部分線程中的線程處理完成后,將單獨(dú)存 儲的線程對應(yīng)的日志內(nèi)容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中 記錄。
進(jìn)一步,存儲模塊包括
多個存儲子模塊3022:用于單獨(dú)存儲全部多線程中各線程所對應(yīng)的日志內(nèi)
容;
第一寫模塊304包括
第一寫子模塊3042:用于全部多線程處理完成后,將單獨(dú)存儲的線程對應(yīng) 的日志內(nèi)容逐個寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄。
本發(fā)明提供的第四實施例是一種多線程日志記錄裝置,其結(jié)構(gòu)如圖4所示, 包括
存儲模塊302:用于單獨(dú)存儲至少部分線程中各線程所對應(yīng)的日志內(nèi)容; 第二寫模塊306:用于將單獨(dú)存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各 線程所對應(yīng)的日志文件中。
進(jìn)一步,存儲模塊302包括
多個存儲子模塊3022:用于單獨(dú)存儲全部多線程中各線程所對應(yīng)的日志內(nèi)
容;
第二寫模塊306包括
第二寫子模塊3062:用于各線程處理過程中,當(dāng)預(yù)定條件滿足時,將單獨(dú) 存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各線程所對應(yīng)的日志文件中。 該裝置,還包括
分配模塊308:用于各線程處理完成后,將全部生成的日志文件合并為一 個曰志文件。
明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1、一種多線程日志記錄方法,其特征在于,包括將至少部分線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲;所述至少部分線程中的線程處理完成后,將單獨(dú)存儲的線程對應(yīng)的日志內(nèi)容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄。
2、 如權(quán)利要求l所述的方法,其特征在于,將全部多線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲;所述至少部分線程中的線程處理完成后,將單獨(dú)存儲的線程對應(yīng)的日志內(nèi) 容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄具體為全部多線程處理完成后,將單獨(dú)存儲的線程對應(yīng)的日志內(nèi)容逐個寫入日志 文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄。
3、 一種多線程日志記錄方法,其特征在于,包括 將至少部分線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲; 將單獨(dú)存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各線程所對應(yīng)的日志文件中。
4、 如權(quán)利要求3所述的方法,其特征在于, 將至少部分線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲具體為 將全部多線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲。
5、 如權(quán)利要求4所述的方法,其特征在于,將單獨(dú)存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各線程所對應(yīng)的日志文 件中具體為各線程處理過程中,當(dāng)預(yù)定條件滿足時,將單獨(dú)存儲的線程所對應(yīng)的曰志 內(nèi)容對應(yīng)的寫到各線程所對應(yīng)的日志文件中。
6、 如權(quán)利要求5所述的方法,其特征在于,各線程處理完成后,將全部生成的日志文件合并為一個日志文件。
7、 一種多線程日志記錄裝置,其特征在于,包括存儲模塊用于單獨(dú)存儲至少部分線程中各線程所對應(yīng)的日志內(nèi)容; 第一寫模塊用于所述至少部分線程中的線程處理完成后,將單獨(dú)存儲的線程對應(yīng)的日志內(nèi)容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄。
8、 如權(quán)利要求7所述的裝置,其特征在于,存儲模塊包括 多個存儲子模塊用于單獨(dú)存儲全部多線程中各線程所對應(yīng)的日志內(nèi)容; 第一寫模塊包括第一寫子模塊用于全部多線程處理完成后,將單獨(dú)存儲的線程對應(yīng)的日 志內(nèi)容逐個寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄。
9、 如權(quán)利要求7所述的裝置,其特征在于,所述存儲模塊為內(nèi)存中的地 址空間對應(yīng)的存儲空間。
10、 一種多線程日志記錄裝置,其特征在于,包括存儲模塊用于單獨(dú)存儲至少部分線程中各線程所對應(yīng)的日志內(nèi)容; 第二寫模塊用于將單獨(dú)存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各線程 所對應(yīng)的日志文件中。
11、 如權(quán)利要求IO所述的裝置,其特征在于,存儲模塊包括多個存儲子模塊用于單獨(dú)存儲全部多線程中各線程所對應(yīng)的日志內(nèi)容。
12、 如權(quán)利要求11所述的裝置,其特征在于,第二寫模塊包括 第二寫子模塊用于各線程處理過程中,當(dāng)預(yù)定條件滿足時,將單獨(dú)存儲的線程所對應(yīng)的日志內(nèi)容對應(yīng)的寫到各線程所對應(yīng)的日志文件中。
13、 如權(quán)利要求12所述的裝置,其特征在于,還包括分配模塊用于各線程處理完成后,將全部生成的日志文件合并為一個日 志文件。
14、 如權(quán)利要求10所述的裝置,其特征在于,所述存儲模塊為內(nèi)存中的地址空間對應(yīng)的存儲空間。
全文摘要
公開了一種多線程日志記錄方法及裝置,為了解決多個線程的日志文件會出現(xiàn)交錯的問題,本發(fā)明公開的方法包括將至少部分線程中各線程所對應(yīng)的日志內(nèi)容單獨(dú)存儲;所述至少部分線程中的線程處理完成后,將單獨(dú)存儲的線程對應(yīng)的日志內(nèi)容寫入日志文件中,并且各線程的對應(yīng)的日志內(nèi)容集中記錄,正是至少部分線程產(chǎn)生的日志內(nèi)容單獨(dú)存儲,并且將單獨(dú)存儲的日志內(nèi)容集中記錄在日志文件中,因此被集中記錄的日志內(nèi)容在日志文件中,不會再出現(xiàn)和其他線程的日志記錄交錯的。
文檔編號G06F9/38GK101667113SQ20081021057
公開日2010年3月10日 申請日期2008年9月2日 優(yōu)先權(quán)日2008年9月2日
發(fā)明者磊 李 申請人:阿里巴巴集團(tuán)控股有限公司