專利名稱:日志記錄方法及日志系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機應(yīng)用領(lǐng)域,具體涉及一種日志記錄方法及日志系統(tǒng)。
背景技術(shù):
在計算機技術(shù)應(yīng)用中,日志(log)起著十分重要的作用。日志,用于在 計算機程序中對某些信息進行記錄,包括提示、警告及錯誤信息等,這些信 息可以用于分析計算機程序的運行過程。因此,在計算機或其他設(shè)備中一般 都設(shè)置有日志系統(tǒng)專門進行日志記錄工作。
曰志系統(tǒng)中含有日志管理器,當用戶發(fā)出寫日志命令時,日志管理器為
用戶提供一個日志記錄器(Logger),通過該日志記錄器可以直接把各種級別 的日志條目寫到曰志文件、控制臺、或數(shù)據(jù)庫等各種日志目的地。
以Java應(yīng)用舉例說明,Java語言本身帶有日志功能,該功能設(shè)置在 java.util.logging包中。Java應(yīng)用中,日志系統(tǒng)的記錄方式是實時的,也就是 說,在接收到用戶發(fā)出的記錄日志的命令后,立即停下正常的程序的執(zhí)行, 由日志管理器提供的Logger開始記錄日志,日志記錄完之后,程序進一步往 下執(zhí)行。舉例說明,例如程序運行的線程為
調(diào)用代碼1......;
logger.log ("—條日志,,); 寫日志的命令。
調(diào)用代碼2......;
Logger的寫日志過程與用戶調(diào)用代碼是在一個線程中順序執(zhí)行,寫日志 代碼執(zhí)行完才能運行到調(diào)用代碼2,調(diào)用寫日志的代碼返回后,表示日志已 經(jīng)記錄完成。
在對現(xiàn)有技術(shù)的研究和實踐過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)存在以下問題 現(xiàn)有技術(shù)的日志記錄方法是采用實時記錄方式,其他程序需要等待日志 記錄完成后才能繼續(xù)執(zhí)行,因此在記錄日志時會導致正常業(yè)務(wù)的阻塞。而且, 曰志系統(tǒng)本身的特點要求日志的記錄是串行的,按順序一條一條地記錄。現(xiàn) 有的Java日志系統(tǒng)如果應(yīng)用于并發(fā)程序多個線程的程序同時要記錄日志,而 每條日志的記錄過程卻不能并發(fā)處理,這就導致某一時刻只能有一個線程可以執(zhí)行日志操作,在它記錄日志時,其他線程也必須等待,這種等待的時間, 在并發(fā)量大而且日志記錄頻繁的程序中,往往比記錄日志本身消耗的時間還 要多。
總之,現(xiàn)有技術(shù)的日志記錄方法由于采用實時記錄方式,會對正常業(yè)務(wù) 造成影響。
發(fā)明內(nèi)容
本發(fā)明實施例要解決的技術(shù)問題是提供一種日志記錄方法及日志系統(tǒng), 能夠在進行日志記錄時減少對正常業(yè)務(wù)的影響,提高正常業(yè)務(wù)的執(zhí)行速度。
為解決上述技術(shù)問題,本發(fā)明所提供的實施例是通過以下技術(shù)方案實現(xiàn)
的
本發(fā)明實施例提供一種日志記錄方法,包括延時日志記錄器接收記錄 曰志的命令,所述命令中攜帶日志條目;延時日志記錄器將所述命令中的日 志條目存儲到注冊日志管理器中,由所述注冊日志管理器按照設(shè)定條件將存 儲的日志條目進行寫操作。
優(yōu)選的,所述延時日志記錄器接收記錄日志的命令之前進一步包括通 過對日志管理器屬性的設(shè)置,注冊新的日志管理器替換原有的日志管理器, 得到注冊日志管理器;所述注冊日志管理器創(chuàng)建延時日志記錄器,將所述延 時日志記錄器提供給用戶輸入命令。
優(yōu)選的,所述由注冊日志管理器按照設(shè)定條件將存儲的日志條目進行寫 操作具體為由所述注冊日志管理器生成線程,由所述線程按照設(shè)定條件將 存儲的日志條目寫入到目的地,并將寫入操作已完成的日志條目刪除。
優(yōu)選的,所述設(shè)定條件具體為日志條目存儲的時間順序。
優(yōu)選的,所述延時日志記錄器將所述命令中的日志條目存儲到注冊曰志 管理器中具體為延時日志記錄器將所述命令中的日志條目存儲到注冊日志 管理器的曰志條目列表中。
優(yōu)選的,所述注冊日志管理器在獲知應(yīng)用服務(wù)器接收到停止運行命令時, 查看是否存在未進行寫操作的日志條目,若存在,則將未進行寫操作的日志 條目進行寫操作。
優(yōu)選的,所述延時日志記錄器接收記錄日志的命令之后進一步包括判斷所述命令中的日志條目是否達到設(shè)定級別,若是,直接對日志條目進行寫 操作,若否,執(zhí)行將所述命令中的日志條目存儲到注冊日志管理器的步驟。
本發(fā)明實施例提供一種日志系統(tǒng),包括延時日志記錄器,用于接收記
錄曰志的命令,所述命令中攜帶日志條目,將所述命令中的日志條目存儲到
注冊日志管理器中;注冊日志管理器,用于存儲所述延時日志記錄器傳輸?shù)?日志條目,按照設(shè)定條件將存儲的日志條目進行寫操作。
優(yōu)選的,所述注冊日志管理器是通過對日志管理器屬性進行設(shè)置后注冊 得到;所述延時日志記錄器由所述注冊日志管理器創(chuàng)建并提供給用戶輸入命 令。
優(yōu)選的,所述注冊日志管理器包括存儲單元,用于設(shè)置日志條目列表 存儲所述延時日志記錄器傳輸?shù)娜罩緱l目;處理單元,用于生成線程,由所 述線程按照設(shè)定條件將存儲的日志條目寫入到目的地,并將寫入操作已完成 的日志條目刪除。
優(yōu)選的,所述注冊日志管理器還包括條件設(shè)置單元,用于將所述設(shè)定 條件設(shè)置為日志條目存儲的時間順序。
優(yōu)選的,所述注冊日志管理器還包括檢查單元,用于在獲知應(yīng)用服務(wù) 器接收到停止運行命令時,查看所述存儲單元是否存在未進行寫操作的日志 條目,若存在,則通知所述處理單元將未進行寫操作的日志條目進行寫操作。
從上述技術(shù)方案可以看出,本發(fā)明實施例技術(shù)方案提供的日志記錄器, 在接收用戶輸入的記錄日志的命令后,不是直接將命令中的日志條目進行寫 操作,而是將其存儲到注冊日志管理器中,由注冊日志管理器對存儲的日志 記錄進行寫操作。這樣,就不需要等待日志寫操作完成后才執(zhí)行其他正常業(yè) 務(wù)程序,從而能夠減少對正常業(yè)務(wù)的影響,提高正常業(yè)務(wù)的執(zhí)行速度。而且,
對于具有大量日志寫入需求且具有大量并發(fā)程序運行的情況,各個并發(fā)程序 都不需要等待日志寫完才能繼續(xù)執(zhí)行,這樣就可以大大提高程序的總體執(zhí)行速度。
進一步的,本發(fā)明實施例技術(shù)方案中,所述設(shè)定條件可以根據(jù)需要進行 設(shè)置,例如設(shè)置為日志條目存儲的時間順序。
另外,還增加了一個檢測機制,即在獲知應(yīng)用服務(wù)器接收到停止運行命令時,查看是否存在未進行寫操作的日志條目,若存在,則將未進行寫操作
的日志條目進行寫操作,從而防止遺漏寫入日志條目。
圖l是本發(fā)明實施例一 日志記錄方法流^i圖; 圖2是本發(fā)明實施例二日志記錄方法流禾呈圖; 圖3是本發(fā)明實施例三日志記錄方法流程圖; 圖4是本發(fā)明實施例日志系統(tǒng)結(jié)構(gòu)示意圖。
具體實施例方式
本發(fā)明實施例提供一種日志記錄方法,能夠減少對正常業(yè)務(wù)的影響,提 高正常業(yè)務(wù)的執(zhí)行速度。
本發(fā)明實施例技術(shù)方案主要是提供一個新的日志記錄器,在接收用戶輸 入的記錄日志的命令后,不是直接將命令中的日志條目進行寫操作,而是將 其存儲到注冊日志管理器中,例如存在日志管理器的日志條目列表中,由注 冊日志管理器對存儲的日志記錄進行寫操作。這樣,就不需要等待日志寫操 作完成后才執(zhí)行其他正常業(yè)務(wù)程序,從而能夠減少對正常業(yè)務(wù)的影響,提高 正常業(yè)務(wù)的執(zhí)行速度。
本發(fā)明實施例是以日志系統(tǒng)應(yīng)用于應(yīng)用服務(wù)器的場景舉例說明。 為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附 圖和具體實施方式
對本發(fā)明作進一步詳細的說明。
請參閱圖1 ,是本發(fā)明實施例 一 日志記錄方法流程圖,包括
步驟IOI、延時日志記錄器接收記錄日志的命令,所述命令中攜帶日志條
目
延時日志記錄器由注冊日志管理器創(chuàng)建并提供給用戶輸入命令。注冊日 志管理器是注冊到系統(tǒng)中替換原有的日志管理器的實體,相比于原有的日志 管理器,注冊日志管理器可以提供一個單獨的線程用于專門處理日志條目的 寫操作。當應(yīng)用服務(wù)器啟動后,日志系統(tǒng)中的注冊日志管理器也會啟動。
當用戶獲取到延時日志記錄器時,向其輸入記錄日志的命令,其中攜帶 需要寫的日志條目。延時日志記錄器接收用戶輸入的命令。
步驟102、延時日志記錄器將所述命令中的日志條目存儲到注冊日志管理器中,由所述注冊日志管理器按照設(shè)定條件將存儲的日志條目進行寫操作。
延時日志記錄器接收用戶輸入的命令后,不執(zhí)行對日志條目的寫操作, 而是將命令中攜帶的日志條目存儲到注冊日志管理器中,然后立即返回,使 得用戶的程序可以繼續(xù)向下執(zhí)行,而無需等待日志條目的寫操作真正完成。
注冊日志管理器可以設(shè)置日志條目列表,用于存儲延時日志記錄器傳輸 的日志條目。當然,也可以按其他數(shù)據(jù)存儲方式進行存儲。
注冊日志管理器含有一個單獨的線程,當應(yīng)用服務(wù)器啟動后,該線程立 即監(jiān)控日志條目中的日志條目,按照設(shè)定條件將存儲的日志條目進行寫操作, 即將存儲的日志條目寫入到目的地。當對日志條目列表中的一個日志條目的 寫操作完成后,將該日志條目刪除,再繼續(xù)對下一個日志條目進行寫操作。
這里所述的設(shè)定條件,例如可以是日志條目存儲的時間順序,或者是其 他方式。
可以發(fā)現(xiàn),本實施例的技術(shù)方案,由于延時日志記錄器接收記錄日志的 命令,不是執(zhí)行對命令中攜帶的日志條目的寫操作,而是將日志條目存儲到 注冊日志管理器中,由所述注冊日志管理器按照設(shè)定條件將存儲的日志條目 進行寫操作。這樣,就不需要等待日志寫操作完成后才執(zhí)行其他正常業(yè)務(wù)程 序,從而能夠減少對正常業(yè)務(wù)的影響,提高正常業(yè)務(wù)的執(zhí)行速度。而且,對 于具有大量日志寫入需求且具有大量并發(fā)程序運行的情況,各個并發(fā)程序都 不需要等待日志寫完才能繼續(xù)執(zhí)行,這樣就可以大大提高程序的總體執(zhí)行速 度。
請參閱圖2,是本發(fā)明實施例二日志記錄方法流程圖。在實施例二中將更 詳細的介紹日志記錄的具體流程。實施例二中以Java應(yīng)用舉例說明但不局限于 此。
如圖2所示,包括
步驟201、用戶發(fā)起請求,要求獲取日志記錄器Logger;
用戶調(diào)用標準應(yīng)用程序接口 ( Application Programming Interface, API)要 求獲取Logger進4亍使用。
步驟202、注冊日志管理器即Apusic日志管理器(后續(xù)采用Apusic日志管 理器進行描述)接收用戶的請求;Apusic日志管理器是本發(fā)明實施例中所提供的注冊到系統(tǒng)中用于替換系 統(tǒng)中原有的日志管理器的實體,其功能已經(jīng)有所變化,可以提供一個單獨的 線程用于專門處理日志條目的寫操作。
具體可以通過在Java語言系統(tǒng)中設(shè)置日志管理器屬性(即 java.util.logging.manager屬性),將Apusic日志管理器注冊到Java語言系統(tǒng)用于 替換Java語言系統(tǒng)中原有的日志管理器。
設(shè)置java.util.logging.manager屬性進行Apusic日志管理器的注冊,可以有 兩種方式
1) 啟動java程序時加上屬性設(shè)置參數(shù) -Djava.util.logging.manageF要設(shè)置的管理器類名,例如 Java —Djava.util.logging.manager^
com.apusic.logging.manager.ServerLogManager com.apusic.server.Main; 表 示注冊Apusic日志管理器替換原有的日志管理器。
2) 在程序中加上屬性設(shè)置參數(shù),例如在程序的開始,通過代碼進行設(shè)置 System.setProperty("java.util.logging.manager",
"com鄰usic.logging.manager.ServerLogManager"); 表示注冊Apusic 日志管理器替換原有的日志管理器。
當采用Apusic日志管理器替換了 Java語言系統(tǒng)自身的日志管理器后,相關(guān) 事務(wù)由Apusic日志管理器進行控制,因此Apusic日志管理器會接收用戶的請 求。
步驟203、 Apusic日志管理器創(chuàng)建延時日志記錄器即LazyLogger并返回給 用戶;
Apusic日志管理器創(chuàng)建一個全新的Logger即LazyLogger, LazyLogger是繼 牙義自標準的java.util.logging.Logger, ^f旦LazyLogger才丸ft的動作是i殳置為^]夸才妄收 到的命令中的日志條目存儲到Apusic日志管理器的日志條目列表中,而不是設(shè) 置為直接把日志條目寫到目的地。
步驟204、 LazyLogger接收用戶輸入的記錄日志的命令,將命令中攜帶的 日志條目存儲到Apusic日志管理器;
用戶獲取到LazyLogger之后,向LazyLogger輸入命令,要求寫出某個曰志條目。LazyLogger接到用戶的命令后,不直接把日志條目寫到目的地,而是把 它寫入到Apusic日志管理器內(nèi)的一個日志條目列表,然后立刻返回,使得用戶 的正常業(yè)務(wù)程序可以繼續(xù)向下執(zhí)行,而無需等待日志條目真正寫入到目的地。 步驟205、 Apusic日志管理器將存儲的日志條目進行寫操作。 Apusic日志管理器生成 一 個負責日志寫入的線程,這個線程實時監(jiān)控 Apusic日志管理器內(nèi)的日志條目列表,按照設(shè)定條件對存儲的日志條目進行寫 操作。
Apusic日志管理器生成一個線程,例如設(shè)置代碼
My Thread t = new MyThread();
t.start();
這樣,線程t就開始運行了。
所述的設(shè)定條件可以根據(jù)需要進行設(shè)置。例如生成的線程按照日志條目 存儲的時間順序,對先存入這個日志條目列表的日志條目,進行實際的寫入 操作,當寫入到目的地后,從列表中刪除該條目,再繼續(xù)對下一個日志條目 進行寫操作。
需要說明的是,上述步驟中LazyLogger還可以根據(jù)日志條目的級別進行相 應(yīng)處理。日志條目的級別是指日志條目的嚴重程度,例如可以分為 一般、 警告、錯誤、嚴重等。那么對于日志條目的級別是達到某一設(shè)定級別及以上 的,假設(shè)級別為"嚴重",貝'jLazyLogger可以采取立刻寫入的方式,而不是存 儲到日志條目列表,進行延時寫入。這樣,可以保證某些日志條目的實時性, 但這種處理行為是可選的,因為日志系統(tǒng)的特點是實時性要求不是很強,對 于大多數(shù)日志條目,并不需要這樣的實時性。
還需要說明的是,上述步驟204和205是并行處理的,即步驟204中 LazyLogger把各種日志條目存儲到Apusic日志管理器中的日志條目列表的同 時,步驟205中Apusic日志管理器也在不斷的將日志條目列表中的日志條目進 行寫操作。
可以發(fā)現(xiàn),本實施例的技術(shù)方案,注冊了Apusic日志管理器替換原有的日 志管理器,并且由Apusic日志管理器創(chuàng)建一個LazyLogger,該LazyLogger接收 用戶輸入的記錄日志的命令后,不是執(zhí)行對命令中攜帶的日志條目的寫操作,而是將日志條目存儲到Apusic日志管理器的日志條目列表中,由所述Apusic
日志管理器按照設(shè)定條件將存儲的日志條目進行寫操作。這樣,就不需要等 待曰志寫操作完成后才執(zhí)行其他正常業(yè)務(wù)程序,從而能夠減少對正常業(yè)務(wù)的 影響,提高正常業(yè)務(wù)的執(zhí)行速度。而且,對于具有大量日志寫入需求且具有 大量并發(fā)程序運行的情況,各個并發(fā)程序都不需要等待日志寫完才能繼續(xù)執(zhí) 行,這樣就可以大大提高程序的總體執(zhí)行速度。另外,從用戶角度來說,不 需要改變原有操作方式及習慣,從而為用戶提供了比較好的用戶體驗。
請參閱圖3,是本發(fā)明實施例三日志記錄方法流程圖。實施例三與實施例
二相比,主要是增加了一個防止遺漏寫入日志條目的步驟。
如圖3所示,包括
步驟301、用戶發(fā)起請求,要求獲取日志記錄器Logger;
用戶調(diào)用標準應(yīng)用程序接口 API,要求獲取Logger進行使用。
步驟302、注冊日志管理器即Apusic日志管理器(后續(xù)采用Apusic日志管 理器進行描述)接收用戶的請求;
Apusic日志管理器是本發(fā)明實施例中所提供的注冊到系統(tǒng)中用于替換系 統(tǒng)中原有的日志管理器的實體,其功能已經(jīng)有所變化,可以提供一個單獨的 線程用于專門處理日志條目的寫操作。
具體可以通過在Java語言系統(tǒng)中設(shè)置日志管理器屬性(即 java.util.logging.manager屬性),將Apusic日志管理器注冊到Java語言系統(tǒng)用于 替換Java語言系統(tǒng)中原有的日志管理器。
設(shè)置java.util.logging.manager屬性進行Apusic日志管理器的注冊,可以有 兩種方式,具體可參閱上述實施例二中的敘述。
當采用Apusic日志管理器替換了Java語言系統(tǒng)自身的日志管理器后,相關(guān) 事務(wù)由Apusic日志管理器進行控制,因此Apusic日志管理器會接收用戶的請 求。
步驟303、 Apusic日志管理器創(chuàng)建延時日志記錄器即LazyLogger并返回給 用戶;
Apusic日志管理器創(chuàng)建一個全新的Logger即LazyLogger, LazyLogger是繼 7|義自標準的java.util.logging丄ogger, ^f旦LazyLogger凈丸4亍的動作是"i殳置為^l尋4妄收到的命令中的日志條目存儲到Apusic日志管理器的日志條目列表中,而不是設(shè) 置為直接把日志條目寫到目的地。
步驟304、 LazyLogger接收用戶輸入的記錄日志的命令,將命令中攜帶的 日志條目存儲到Apusic日志管理器;
用戶獲取到LazyLogger之后,向LazyLogger輸入命令,要求寫出某個曰志 條目。LazyLogger接到用戶的命令后,不直接把日志條目寫到目的地,而是把 它寫入到Apusic日志管理器內(nèi)的一個日志條目列表,然后立刻返回使得用戶的 正常業(yè)務(wù)程序可以繼續(xù)向下執(zhí)行,而無需等待日志條目真正寫入到目的地。
步驟305、 Apusic日志管理器將存儲的日志條目進行寫操作;
Apusic日志管理器生成一個負責日志寫入的線程,這個線程實時監(jiān)控 Apusic日志管理器內(nèi)的日志條目列表,按照設(shè)定條件對存儲的日志條目進行寫 操作。
所述的設(shè)定條件可以根據(jù)需要進行設(shè)置。例如生成的線程例如按照曰志 條目存儲的時間順序,對先存入這個日志條目列表的日志條目,進行實際的 寫入操作,當寫入到目的地后,從列表中刪除該條目,再繼續(xù)對下一個日志 條目進行寫操作。
需要說明的是,上述步驟中LazyLogger還可以根據(jù)日志條目的級別進行相 應(yīng)處理。對于日志條目的級別是達到某一設(shè)定級別及以上的,假設(shè)級別為"嚴 重",則LazyLogger可以采取立刻寫入的方式,而不是存儲到日志條目列表, 進行延時寫入。這樣,可以保證某些日志條目的實時性,但這種處理行為是 可選的。
還需要說明的是,上述步驟304和305是并行處理的,即步驟304中 LazyLogger4巴各種日志條目存儲到Apusic日志管理器中的日志條目列表的同 時,步驟305中Apusic日志管理器也在不斷的將日志條目列表中的日志條目進 行寫操作。
步驟306、 Apusic日志管理器在應(yīng)用服務(wù)器停止運行前,查看是否存在未 進行寫操作的日志條目,若存在,則將未進行寫操作的日志條目進行寫操作。
日志系統(tǒng)是運行在應(yīng)用服務(wù)器中,當用戶要求應(yīng)用服務(wù)器停止運行時, 應(yīng)用服務(wù)器需要進行一系列的程序操作才會最終停止運行,Apusic日志管理器獲知應(yīng)用服務(wù)器準備停止運行時,將要求LazyLogger停止將日志條目存儲到日 志條目列表中,并立即查看日志條目列表,確定是否還存在未處理的日志條 目,若存在,則繼續(xù)把未處理的日志條目寫到目的地,然后才結(jié)束程序。這 樣,就保證不會有日志條目遺漏進行寫操作了 。
可以發(fā)現(xiàn),本實施例的技術(shù)方案,在具有實施例二的有益效果的基礎(chǔ)上, 進一步通過增加一個處理步驟,可以保證不會有日志條目遺漏進行寫操作, 達到更好的效果。
上述內(nèi)容詳細介紹了本發(fā)明實施例的日志記錄方法,相應(yīng)的,本發(fā)明實
施例提供一種日志系統(tǒng)。
請參閱圖4,是本發(fā)明實施例日志系統(tǒng)結(jié)構(gòu)示意圖。
如圖4所示,日志系統(tǒng)包括延時日志記錄器41、注冊日志管理器42。
延時日志記錄器41,用于接收記錄日志的命令,所述命令中攜帶日志條
目,將所述命令中的日志條目存儲到注冊日志管理器42中。
注冊日志管理器42,用于存儲所述延時日志記錄器41傳輸?shù)娜罩緱l目,
按照設(shè)定條件將存儲的日志條目進行寫操作。
所述注冊日志管理器42是通過對日志管理器屬性進行設(shè)置后注冊得到; 所述延時日志記錄器41由所述注冊日志管理器42創(chuàng)建并提供給用戶輸入命 令。注冊日志管理器42是注冊到系統(tǒng)中替換原有的日志管理器的實體,相比 于原有的日志管理器,注冊日志管理器42可以提供一個單獨的線程用于專門 處理日志條目的寫操作。當應(yīng)用服務(wù)器啟動后,日志系統(tǒng)中的注冊日志管理 器42也會啟動。注冊日志管理器42創(chuàng)建一個全新的日志記錄器即延時日志記 錄器41,延時日志記錄器41是繼承自標準的java.util.logging丄ogger,但執(zhí)行的 動作是設(shè)置為將接收到的命令中的日志條目存儲到注冊日志管理器42的曰志 條目列表中,而不是設(shè)置為直接把日志條目寫到目的地。當然,也可以再設(shè) 置其他執(zhí)行動作,例如對于日志條目的級別是達到某一設(shè)定級別及以上的, 假設(shè)級別為"嚴重",則釆取立刻寫入的方式。
所述注冊日志管理器42包括存儲單元421、處理單元422。 存儲單元421,用于設(shè)置日志條目列表存儲所述延時日志記錄器41傳輸?shù)?日志條目。當然,也可以按其他數(shù)據(jù)存儲方式進行存儲。處理單元422,用于生成線程,由所述線程按照設(shè)定條件將存儲的日志條 目寫入到目的地,并將寫入操作已完成的日志條目刪除。處理單元422含有一 個單獨的線程,當應(yīng)用服務(wù)器啟動后,該線程立即監(jiān)控曰志條目中的日志條 目,按照設(shè)定條件將存儲的日志條目進行寫操作,即將存儲的日志條目寫入 到目的地。當對日志條目列表中的一個日志條目的寫操作完成后,將該日志 條目刪除,再繼續(xù)對下一個日志條目進行寫操作。
所述注冊日志管理器42還包括條件設(shè)置單元423。 條件設(shè)置單元423,用于將設(shè)定條件設(shè)置為日志條目存儲的時間順序。 當設(shè)定條件為日志條目存儲的時間順序時,處理單元422對先存入這個曰 志條目列表的日志條目,進行實際的寫入操作,當寫入到目的地后,從列表 中刪除該條目,再繼續(xù)對下一個日志條目進行寫操作。 所述注冊日志管理器42還包括檢查單元424。
檢查單元424,用于在獲知應(yīng)用服務(wù)器接收到停止運行命令時,查看所述 存儲單元421是否存在未進行寫操作的日志條目,若存在,則通知所述處理單 元422將未進行寫操作的日志條目進行寫操作。
綜上所述,本發(fā)明實施例技術(shù)方案是提供一個新的日志記錄器,在接收 用戶輸入的記錄日志的命令后,不是直接將命令中的日志條目進行寫操作, 而是將其存儲到注冊日志管理器中,由注冊日志管理器對存儲的日志記錄進 行寫操作。這樣,就不需要等待日志寫操作完成后才執(zhí)行其他正常業(yè)務(wù)程序, 從而能夠減少對正常業(yè)務(wù)的影響,提高正常業(yè)務(wù)的執(zhí)行速度。而且,對于具 有大量日志寫入需求且具有大量并發(fā)程序運行的情況,各個并發(fā)程序都不需 要等待日志寫完才能繼續(xù)執(zhí)行,這樣就可以大大提高程序的總體執(zhí)行速度。
進一步的,本發(fā)明實施例技術(shù)方案中,所述設(shè)定條件可以根據(jù)需要進行 設(shè)置,例如設(shè)置為日志條目存儲的時間順序。
另外,還增加了一個檢測機制,即在獲知應(yīng)用服務(wù)器接收到停止運行命 令時,查看是否存在未進行寫操作的日志條目,若存在,則將未進行寫操作 的曰志條目進行寫操作,從而防止遺漏寫入日志條目。
本發(fā)明可以用于眾多通用或?qū)S玫挠嬎阆到y(tǒng)環(huán)境或配置中。例如個人 計算機、服務(wù)器計算機、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費電子設(shè)備、網(wǎng)絡(luò)PC、小型 計算機、大型計算機、包括以上任何系統(tǒng)或設(shè)備的分布式計算環(huán)境等等。此
夕卜,本發(fā)明還可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述, 例如程序模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類 型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計算環(huán)境中 實踐本發(fā)明,在這些分布式計算環(huán)境中,由通過通訊網(wǎng)絡(luò)而被連接的遠程處 理設(shè)備來執(zhí)行任務(wù)。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備 在內(nèi)的本地和遠程計算機存儲介質(zhì)中。
以上對本發(fā)明實施例所提供的一種日志記錄方法及日志系統(tǒng)進行了詳細
實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本 領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應(yīng)用范圍上均 會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1、一種日志記錄方法,其特征在于,包括延時日志記錄器接收記錄日志的命令,所述命令中攜帶日志條目;延時日志記錄器將所述命令中的日志條目存儲到注冊日志管理器中,由所述注冊日志管理器按照設(shè)定條件將存儲的日志條目進行寫操作。
2、 根據(jù)權(quán)利要求l所述的日志記錄方法,其特征在于 所述延時日志記錄器接收記錄日志的命令之前進一步包括通過對日志管理器屬性的設(shè)置,注冊新的日志管理器替換原有的日志管 理器,得到注冊日志管理器;所述注冊日志管理器創(chuàng)建延時日志記錄器,將所述延時日志記錄器提供 給用戶輸入命令。
3、 根據(jù)權(quán)利要求1或2所述的日志記錄方法,其特征在于 所述由注冊日志管理器按照設(shè)定條件將存儲的日志條目進行寫操作具體為由所述注冊日志管理器生成線程,由所述線程按照設(shè)定條件將存儲的日 志條目寫入到目的地,并將寫入操作已完成的日志條目刪除。
4、 根據(jù)權(quán)利要求3所述的日志記錄方法,其特征在于 所述設(shè)定條件具體為日志條目存儲的時間順序。
5、 根據(jù)權(quán)利要求1或2所述的日志記錄方法,其特征在于所述延時日志記錄器將所述命令中的日志條目存儲到注冊日志管理器中 具體為延時日志記錄器將所述命令中的日志條目存儲到注冊日志管理器的曰志 條目列表中。
6、 根據(jù)權(quán)利要求1或2所述的日志記錄方法,其特征在于,還包括 所述注冊日志管理器在獲知應(yīng)用服務(wù)器接收到停止運行命令時,查看是否存在未進行寫操作的日志條目,若存在,將未進行寫操作的日志條目進行 寫操作。
7、 根據(jù)權(quán)利要求1或2所述的日志記錄方法,其特征在于 所述延時日志記錄器接收記錄日志的命令之后進一步包括 判斷所述命令中的日志條目是否達到設(shè)定級別,若是,直接對日志條目進行寫操作,若否,執(zhí)行將所述命令中的日志條目存儲到注冊日志管理器的 步驟。
8、 一種日志系統(tǒng),其特征在于,包括延時日志記錄器,用于接收記錄日志的命令,所述命令中攜帶日志條目, 將所述命令中的日志條目存儲到注冊日志管理器中;注冊日志管理器,用于存儲所述延時日志記錄器傳輸?shù)娜罩緱l目,按照 設(shè)定條件將存儲的日志條目進行寫操作。
9、 根據(jù)權(quán)利要求8所述的日志系統(tǒng),其特征在于所述注冊日志管理器是通過對日志管理器屬性進行設(shè)置后注冊得到; 所述延時日志記錄器由所述注冊日志管理器創(chuàng)建并提供給用戶輸入命令。
10、 根據(jù)權(quán)利要求8所述的日志系統(tǒng),其特征在于,所述注冊日志管理器 包括存儲單元,用于設(shè)置日志條目列表存儲所述延時日志記錄器傳輸?shù)脑恢緱l目;處理單元,用于生成線程,由所述線程按照設(shè)定條件將存儲的日志條目 寫入到目的地,并將寫入操作已完成的日志條目刪除。
11、 根據(jù)權(quán)利要求10所述的日志系統(tǒng),其特征在于,所述注冊日志管理 器還包括條件設(shè)置單元,用于將所述設(shè)定條件設(shè)置為日志條目存儲的時間順序。
12、 根據(jù)權(quán)利要求10或11所述的日志系統(tǒng),其特征在于,所述注冊曰志 管理器還包括檢查單元,用于在獲知應(yīng)用服務(wù)器接收到停止運行命令時,查看所述存 儲單元是否存在未進行寫操作的日志條目,若存在,則通知所述處理單元將 未進行寫操作的日志條目進行寫操作。
全文摘要
本發(fā)明實施例公開一種日志記錄方法及日志系統(tǒng)。所述方法包括延時日志記錄器接收記錄日志的命令,所述命令中攜帶日志條目;延時日志記錄器將所述命令中的日志條目存儲到注冊日志管理器中,由所述注冊日志管理器按照設(shè)定條件將存儲的日志條目進行寫操作。相應(yīng)的,本發(fā)明實施例提供一種日志系統(tǒng),包括延時日志記錄器,用于接收記錄日志的命令,所述命令中攜帶日志條目,將所述命令中的日志條目存儲到注冊日志管理器中;注冊日志管理器,用于存儲所述延時日志記錄器傳輸?shù)娜罩緱l目,按照設(shè)定條件將存儲的日志條目進行寫操作。本發(fā)明實施例提供的技術(shù)方案能夠在進行日志記錄時減少對正常業(yè)務(wù)的影響,提高正常業(yè)務(wù)的執(zhí)行速度。
文檔編號G06F11/34GK101425034SQ20081014570
公開日2009年5月6日 申請日期2008年8月11日 優(yōu)先權(quán)日2008年8月11日
發(fā)明者江海軍 申請人:深圳市金蝶中間件有限公司