專利名稱:程序日志記錄優化方法和系統的制作方法
技術領域:
本發明涉及應用程序日志技術領域。更具體地,本發明尤其涉及通過將應用程序中原有的日志方法進行優化并重新注入應用程序的方法和系統。
背景技術:
應用程序的日志方法(Log Method)是在應用程序開發時被注入程序自身代碼中的一些指令,用于在程序運行時記錄所發生的各種事件,對程序的運行進行監控,從而有助于理解系統及程序的運行狀態并對出現的問題進行診斷。對于缺乏用戶交互性的應用程序而言,日志記錄工作尤為重要。例如,為了監控一個應用程序在運行時出現的網絡連接錯誤,可以在該程序中插入相關的日志方法,將出現網絡連接錯誤所對應的IP地址、出錯時間等信息記錄下來,存儲在日志文件中,以便程序管理員對其進行分析、診斷。有研究顯示,一個應用程序中大約有5%的代碼是專門用于記錄程序日志的。現有的程序日志系統如圖2所示:應用程序201中包含程序自身的代碼以及用于日志記錄的日志方法的代碼。在實時運行環境202下,應用程序在運行過程中可能會被觸發日志記錄,通過執行日志方法203,可以生成日志信息204。日志信息204通常以文件的形式存在,存儲于硬盤或其它存儲介質上。目前,程序日志記錄主要存在兩大問題。其一是存儲日志文件會耗費大量的硬盤資源。在程序運行過程中,會有大量的日志信息被記錄在硬盤或其它存儲裝置中,并且日志信息的增長是不受限制的。由于硬盤容量的限制,可能自動清除舊的日志信息,從而導致重要信息丟失。其二,記錄大量的日志信息會導致頻繁的10(輸入輸出)操作,從而降低了應用程序運行的速度。現有技術中存在解決上述問題的技術方案。根據其中一種現有技術方案是通過根據性能開銷(Performance Overhead)來調整日志策略,性能開銷指的是由日志記錄操作占用的計算資源。這種現有技術方案的實質是以犧牲日志信息的完整性為代價來換取性能的提升,同樣存在日志信息丟失的問題,并且其只能在應用程序開發時采用,而無法在不修改已有的程序代碼和日志記錄機制(legacy mechanism)的前提下減小日志文件的大小。另一種現有技術方案是通過人工手動地更改已有的日志記錄機制,但需要耗費大量的人力和時間,需要對程序代碼的深入理解,在實踐中并不可行。
發明內容
考慮到上述存在的問題,本發明的目的之一在于提供一種減小日志信息存儲量的應用程序日志記錄優化方法和系統。本發明的又一目的在于提供一種能夠降低日志記錄操作對應用程序的運行所造成的性能影響的應用程序日志記錄優化方法和系統。本發明的再一目的在于提供一種無需改變已有的應用程序中的日志記錄機制,就可以減小日志信息存儲量降低日志記錄操作對應用程序的運行所造成的性能影響的應用程序日志記錄優化方法和系統。
根據本發明的一個方面,提供了一種用于優化應用程序日志記錄的方法,包括:識別應用程序中的原日志方法;將所述原日志方法中的參數分為常量部分和變量部分;建立所述常量部分和變量部分間的對應關系標識;利用所述常量部分、變量部分以及對應關系標識,構造優化日志方法;以及通過代碼注入,將所述應用程序中的原日志方法替換為所述優化日志方法。根據本發明的一個實施例,對應于常量部分的日志信息僅被記錄一次,并且所述對應于變量部分的日志信息在每次被觸發時均被記錄。根據本發明的另一方面,提供了一種用于優化應用程序日志記錄的系統,包括日志方法識別裝置,被配置為識別應用程序中的原日志方法;參數劃分裝置,被配置為將所述原日志方法中的字符串參數分為常量部分和變量部分;標識建立裝置,被配置為建立所述常量部分和變量部分間的對應關系標識;優化日志方法構造裝置,被配置為利用所述常量部分、變量部分以及對應關系標識,構造優化日志方法;以及日志方法替換裝置,被配置為通過代碼注入,將所述應用程序中的原日志方法替換為所述優化日志方法。根據本發明的方法和系統,可以減小日志信息存儲量并降低日志記錄的IO操作,從而減小對應用程序的運行所造成的性能影響。同時,代碼的注入可在目標代碼層面實現,并且無需改變已有的應用程序中的日志記錄機制——觸發日志記錄的條件以及最終生成的日志記錄與利用原日志方法的情況下是一致的。
通過對結合附圖所示出的實施方式進行詳細說明,本發明的上述以及其他特征將更加明顯,本發明附圖中相同的標號表示相同或相似的部件。在附圖中,圖1示出了適于用來實現本發明實施方式的示例性計算系統100的框圖;圖2示出了現有技術中的程序日志系統的組成模塊圖;圖3示出了根據本發明一實施例的用于優化應用程序日志記錄的方法的流程圖;圖4示出了根據本發明另一實施例的用于優化應用程序日志記錄的方法的流程圖;圖5示出了根據本發明一實施例的用于優化應用程序日志記錄的系統的框圖;圖6A示出了根據本發明一實施例的原日志文件和優化日志文件的示意圖;圖6B示出了根據本發明一實施例的利用優化日志文件記錄日志的示意圖;圖7示出了根據本發明一實施例的程序日志系統的組成模塊圖。
具體實施例方式在下文中,將參考附圖通過實施方式對本發明提供的用于優化應用程序日志記錄的方法和系統進行詳細地描述。所屬技術領域的技術人員知道,本發明的多個方面可以體現為系統、方法或計算機程序產品。因此,本發明的多個方面可以具體實現為以下形式,即,可以是完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等)、或者本文一般稱為“電路”、“模塊”或“系統”的軟件部分與硬件部分的組合。此外,本發明的多個方面還可以采取體現在一個或多個計算機可讀介質中的計算機程序產品的形式,該計算機可讀介質中包含計算機可用的程序碼。
可以使用一個或多個計算機可讀的介質的任何組合。計算機可讀介質可以是計算機可讀信號介質或者計算機可讀存儲介質。計算機可讀存儲介質例如可以是一但不限于——電的、磁的、光的、電磁的、紅外線的、或半導體的系統、裝置、器件或任何以上的組合。計算機可讀存儲介質的更具體的例子(非窮舉的列表)包括以下:有一個或多個導線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任何合適的組合。在本文件的語境中,計算機可讀存儲介質可以是任何包含或存儲程序的有形的介質,該程序被指令執行系統、裝置或者器件使用或者與其結合使用。計算機可讀的信號介質可包括在基帶中或者作為載波一部分傳播的、其中體現計算機可讀的程序碼的傳播的數據信號。這種傳播的信號可以采用多種形式,包括——但不限于——電磁信號、光信號或任何以上合適的組合。計算機可讀的信號介質可以是并非為計算機可讀存儲介質、但是能發送、傳播或者傳輸用于由指令執行系統、裝置或者器件使用或者與其結合使用的程序的任何計算機可讀介質。計算機可讀介質上包含的程序代碼可以用任何適當的介質傳輸,包括——但不限于——無線、電線、光纜、RF等等,或者任何合適的上述組合。計算機可讀介質上包含的程序代碼可以用任何適當的介質傳輸,包括一但不限于——無線、電線、光纜、RF等等,或者任何合適的上述組合。用于執行本發明的操作的計算機程序碼,可以以一種或多種程序設計語言的任何組合來編寫,所述程序設計語言包括面向對象的程序設計語言-諸如Java、Smalltalk、C++之類,還包括常規的過程式程序設計語言-諸如“C”程序設計語言或類似的程序設計語言。程序碼可以完全地在用戶的計算上執行、部分地在用戶的計算機上執行、作為一個獨立的軟件包執行、部分在用戶的計算機上部分在遠程計算機上執行、或者完全在遠程計算機或服務器上執行。在后一種情形中,遠程計算機可以通過任何種類的網絡一包括局域網(LAN)或廣域網(WAN)-連接到用戶的計算機,或者,可以(例如利用因特網服務提供商來通過因特網)連接到外部計算機。以下參照按照本發明實施例的方法、裝置(系統)和計算機程序產品的流程圖和/或框圖描述本發明的多個方面。要明白的是,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機程序指令實現。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數據處理裝置的處理器,從而生產出一種機器,使得通過計算機或其它可編程數據處理裝置執行的這些指令,產生實現流程圖和/或框圖中的方框中規定的功能/操作的裝置。也可以把這些計算機程序指令存儲在能指令計算機或其它可編程數據處理裝置以特定方式工作的計算機可讀介質中,這樣,存儲在計算機可讀介質中的指令產生一個包括實現流程圖和/或框圖中的方框中規定的功能/操作的指令裝置(instruction means)的制造品。也可以把計算機程序指令加載到計算機或其它可編程數據處理裝置上,使得在計算機或其它可編程數據處理裝置上執行一系列操作步驟,以產生計算機實現的過程,從而在計算機或其它可編程裝置上執行的指令就提供實現流程圖和/或框圖中的方框中規定的功能/操作的過程。下面參看圖1。圖1示出了適于用來實現本發明實施方式的示例性計算系統100的框圖。如所示,計算機系統100可以包括:CPU(中央處理單元)101、RAM(隨機存取存儲器)102、ROM (只讀存儲器)103、系統總線104、硬盤控制器105、鍵盤控制器106、串行接口控制器107、并行接口控制器108、顯示控制器109、硬盤110、鍵盤111、串行外部設備112、并行外部設備113和顯示器114。在這些設備中,與系統總線104耦合的有CPU IOU RAM102,ROM 103、硬盤控制器105、鍵盤控制器106、串行控制器107、并行控制器108和顯示控制器109。硬盤110與硬盤控制器105耦合,鍵盤111與鍵盤控制器106耦合,串行外部設備112與串行接口控制器107耦合,并行外部設備113與并行接口控制器108耦合,以及顯示器114與顯示控制器109耦合。應當理解,圖1所述的結構框圖僅僅為了示例的目的而示出的,而不是對本發明范圍的限制。在某些情況下,可以根據具體情況而增加或者減少某些設備。圖3示出了根據本發明一實施例的用于優化應用程序日志記錄的方法的流程圖。圖3所示的方法從步驟301開始。在步驟301中,識別應用程序中的原日志方法。這里,“方法”是面向對象程序中的概念,是程序“類”的下層概念,程序代碼包含在“方法”中,所有的“方法”都在“類”中聲明。“原日志方法”即指的是在應用程序開發過程中即編寫好的用于程序日志記錄的代碼,以區別于下文中的“優化日志方法”。根據本發明一實施例,由于大多數應用程序只提供編譯后的目標代碼(binary code),而不提供源代碼(source code),因此通過檢索應用程序的目標代碼來識別其中所包含的原日志方法。根據本發明另一實施例,在應用程序提供源代碼的情況下,通過檢索其源代碼來識別原日志方法。關于具體能夠從程序代碼中識別出其中包含的日志方法,本領域技術人員應當了解,程序中的日志方法都是具有特定名稱的(不管用于編寫何種面向對象程序),因此可以通過從程序所有代碼中檢索出符合特定名稱的“方法”,即可識別出日志方法。例如,java/io/PrintStream.println: (Ljava/lang/String ;) V即為Java代碼中的一個特定的日志方法,其中java/io/PrintStream.println:是其方法名,:(Ljava/lang/String ;)是該方法的參數類型,V是方法返回類型。應當了解,本發明不限于Java語言,而可以適用于任何面向對象語言。日志方法可能有很多,有些用于處理字符串參數,有些用于處理非字符串參數。根據本發明一實施例,在步驟301中識別原日志方法是指僅識別用于處理字符串參數(String Parameter)的日志方法。根據本發明另一實施例,在步驟301中識別原日志方法可以識別出所有的日志方法,然后在后續的步驟中在過濾掉那些非用于處理字符串參數的日志方法。接下來,在步驟302中,將所識別出的原日志方法中的字符串參數分為常量部分和變量部分。顧名思義,“常量部分”指的是無論程序運行時產生何種日志內容,該部分字符串的內容都是固定的。而“變量部分”則指該部分字符串的內容在記錄日志過程中可能發生變化。如圖6A所示的原日志方法的示例,其括號內的部分即為日志方法System, out.println處理的字符串參數,其中的“It’s not able to get connection from”以及“now”在日志記錄中不會發生變化,因此屬于字符串參數的常量部分,而ip則指具體的IP地址,顯然是依具體地址而發生改變的,因此屬于字符串參數的變量部分。通常,字符串參數的常量部分和變量部分在源代碼中的字面表達具有明顯的差別,例如是否具有引號(“”)等,在目標代碼中相應地也具有明顯的差別,可以利用檢索其參數指令特征來判斷究竟是常量字符串還是變量字符串。圖4及相應的文字部分將具體介紹識別常量部分和變量部分的實施例。在步驟303中,建立所述常量部分和變量部分間的對應關系標識。根據本發明一實施例,對應關系標識為特定的ID。例如,將圖6A中的常量部分和變量部分均賦予特定的對應關系標識建立對應關系標識的原因是為了在后續步驟中將常量部分和變量部分分開處理時不會丟失兩者間的關聯關系。本領域技術人員應當理解,對應關系標識可能包括很多種,不限于數字標識、字符標識等,只要能夠將對應于原日志方法中所處理的一條字符串參數中的常量部分和變量部分唯一地關聯起來即可。接下來,圖3所示的方法進行至步驟304,利用所述常量部分、變量部分以及對應關系標識,構造優化日志方法。如圖6A箭頭右側框圖所示,所構造的優化日志方法中包含原日志方法中的所有參數,但是將原日志方法中的字符串參數按常量部分和變量部分分開,并均加入了所建立的對應關系標識。尤其需要注意的是,該框圖中示出的優化構造方法在方法名中加入了 “ConsAndVar”,表明參數包含常量和變量兩部分,也就意味著執行優化構造方法時可以將常量部分和變量部分分開記錄。需要指出的是,圖6A中的示例僅僅是針對Java語言所舉的例子,并且為了便于理解以源代碼的形式展現。本領域技術人員應當理解,所有面向對象語言均可基于本發明的構思執行圖3所示的方法,并且大多數情況下是在目標代碼層面執行,而非在源代碼層面執行。在步驟305中,通過代碼注入,將所述應用程序中的原日志方法替換為所構造的優化日志方法。由于在步驟301識別出了原日志方法,在步驟304中構造了優化日志方法,因此可以在步驟305中進行替換。替換的目的是為了在運行應用程序時執行優化日志方法,從而將原日志方法中的返回參數分成常量、變量兩部分進行記錄,由于常量中的字符串內容固定,因此只需記錄一次,而變量中的字符串內容不固定,因此需要記錄多次。本領域技術人員應當理解,在目標代碼層面的代碼注入(Code Instrument)技術屬于本領域的公知技術,因此在本發明中不做贅述。圖6B示出了根據本發明一實施例的利用優化日志文件記錄日志的示意圖。如圖6B所示,箭頭左邊的框圖為執行原日志文件所生成的日志記錄,可以看出,執行原日志文件時認為參數是一個完整的字符串,因此每次觸發日志記錄(某個IP地址無法連接)時均需完整地向日志文件中輸出完整的字符串內容,導致“It’ s not able to get connectionfrom”以及“now”出現在每條日志記錄中,長此以往就會帶來大量的1/0操作并導致硬盤空間迅速被占用。而圖6B中箭頭右邊的框圖則示出了執行如圖6A所示的優化日志文件而生成的日志記錄。可以看出,字符串參數中的常量部分被記錄在常量日志文件中,且僅記錄一次,其中包含對應關系標識id#l,而變量部分則被記錄在變量日志文件中,且每次觸發均記錄。這樣一來,如果需要閱讀完整的日志文件的話,就可以通過對應關系標識id#l將對應的常量日志文件和變量日志文件組合到一起,生成完整的日志文件。可以理解,常量日志文件中可以記錄多個日志方法的常量參數,而變量日志文件中可以記錄多個日志方法的變量參數,由于有特定對應關系標識,因此不會導致在組合日志文件時發生錯誤。如上所述,利用圖3所示的方法并參考圖6示出的具體實例,可以減小日志信息存儲量并降低日志記錄的10操作,從而減小對應用程序的運行所造成的性能影響。同時,代碼的注入可在目標代碼層面實現,并且無需改變已有的應用程序中的日志記錄機制一觸發日志記錄的條件以及最終生成的日志記錄與利用原日志方法的情況下是完全一致的。圖4示出了根據本發明另一實施例的用于優化應用程序日志記錄的方法的流程圖。圖4所示的方法從步驟401開始。在步驟401中,檢索應用程序的目標代碼。接下來在步驟402中,在應用程序的類中識別具有特定名稱且用于處理字符串參數的原日志方法。步驟401和402對應于圖3中的步驟301,在上文已有過詳細描述。接下,進行至步驟403,定位原日志方法中用于創建字符串參數的指令。雖然在步驟402中已經識別了處理字符串參數的原日志方法,但是對于一個日志方法而言,其中所包含的指令可能不僅僅是用于創建字符串參數的指令,因此為了后續對字符串參數進行分類,需要定位用于創建字符串參數的指令。考慮到在面向對象語言編寫的程序中,通常是先將參數堆棧再調用所聲明的方法,根據本發明的一個實施例,通過利用指針先迭代地找到把參數壓棧的指令,來定位構造字符串參數的指令。本領域技術人員應當理解,可以利用現有技術找到日志方法中把參數壓棧的指令。接下來在步驟404中,檢索所定位的用于創建字符串參數的指令。根據本發明的一個實施例,檢索所定位的用于創建字符串參數的指令包括逐行掃描用于創建字符串參數的指令中的代碼。然后,在步驟405中判斷所檢索的用于創建字符串參數的指令是否為處理常量字符串的常量參數指令。根據本發明的一個實施例,在Java程序中,ldciinumber表示常量字符串操作,因此如果檢索到ldc#number指令(判斷結果為是),則在步驟406中確定所述指令所創建的字符串參數為常量部分。相應地,如果判斷結果為否,則在步驟407中確定所述指令所創建的字符串參數為變量部分。需要指出的是,在非Java的其它面向對象語言編寫的程序中,本領域技術人員可以在不脫離本發明構思的前提下,根據具體的語言規范來設計判斷指令是否用于創建常量字符串的方法。接下來,無論判斷出是常量部分還是變量部分,均進行至步驟408,建立所述常量部分和變量部分間的對應關系標識。步驟408對應于圖3中的步驟303,在此不在贅述。圖4所示的方法進行至步驟409。在步驟409中,將對應關系標識分別加入常量部分和變量部分,并將常量和變量部分合并,以構造優化日志方法。步驟409的實現在圖6A中箭頭右側的框圖中可以得到源代碼層面直觀的展示。如圖6A所示,步驟409中將常量和變量部分合并是指將常量和變量部分放在優化日志方法中的一個大參數下的兩個子參數(new String)結構中,這區別于原日志方法中用字符串緩沖附加方法(“ + ”)連接的單參數結構。需要指出的是,具體如何利用常量部分、變量部分以及對應關系標識來構造優化日志方法,依據不同的語言規范可能有所不同,本發明的實施例僅以Java語言為例闡述本發明的構思可以實現,并不試圖對具體的構造優化日志的方法做出任何限制。接下來,在步驟410中,通過代碼注入將應用程序中的原日志方法替換為所構造的優化日志方法。該步驟對應于圖3中的步驟305,在此不再贅述。最后,在步驟411中,執行優化日志方法,以生成所述應用程序的日志記錄。根據本發明的一個實施例,執行優化日志方法,以生成所述應用程序的日志記錄包括將對應于常量部分的日志信息及對應關系標識記錄在常量日志文件中,以及將對應于變量部分的日志信息以及對應關系標識記錄在變量日志文件中。根據本發明的一個實施例,對應于常量部分的日志信息僅被記錄一次,并且對應于變量部分的日志信息在每次被觸發日志記錄時均被記錄。當然,記錄的次數并非絕對,本領域技術人員完全可以根據需要調整常量日志信息的記錄次數,可能大于一次但是少于每次都記錄。本領域技術人員應當理解,即使不實際執行所替換的優化日志方法,本發明的發明目的也已實現一所構造的日志方法本身的特點即可以保證減少日志記錄的IO操作、減少日志記錄對硬盤存儲空間的占用等。圖5示出了根據本發明一實施例的用于優化應用程序日志記錄的系統的框圖。圖5所示的系統在整體上由系統500表示,具體地系統500包括日志方法識別裝置501,被配置為識別應用程序中的原日志方法;參數劃分裝置502,被配置為將所述原日志方法中的字符串參數分為常量部分和變量部分;標識建立裝置503,被配置為建立所述常量部分和變量部分間的對應關系標識;優化日志方法構造裝置504,被配置為利用所述常量部分、變量部分以及對應關系標識,構造優化日志方法;日志方法替換裝置505,被配置為通過代碼注入,將所述應用程序中的原日志方法替換為所述優化日志方法。可以理解,系統500中的裝置501-505分別對應于圖3所示的方法中的步驟301-305,在此不再贅述。圖7示出了根據本發明一實施例的程序日志系統的組成模塊圖。圖7的目的是為了與圖2示出的現有技術中的程序日志系統的組成模塊進行對比,以更好地體現本發明的構思及創新點,但并非對本發明進行任何限制。圖7示出的程序日志系統包括應用程序701、優化日志分析器702、實時運行環境703、優化日志方法704、常量日志705以及變量日志706。其中應用程序701對應于圖2中的應用程序201,實時運行環境703對應于圖2中的應用程序202,在此不再贅述。而優化日志分析器702的作用是執行圖3中的步驟301-305,因此優化日志方法704替換了圖2中的原日志方法203。因此,利用優化日志方法可以將常量參數存儲在常量日志705中,將變量參數存儲在變量日志706中。附圖中的流程圖和框圖,圖示了按照本發明各種實施例的系統、方法和計算機程序產品的可能實現的體系架構、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段、或代碼的一部分,所述模塊、程序段、或代碼的一部分包含一個或多個用于實現規定的邏輯功能的可執行指令。也應當注意,在有些作為替換的實現中,方框中所標注的功能也可以以不同于附圖中所標注的順序發生。例如,兩個接連地表示的方框實際上可以基本并行地執行,它們有時也可以按相反的順序執行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執行規定的功能或操作的專用的基于硬件的系統來實現,或者可以用專用硬件與計算機指令的組合來實現。雖然以上結合具體實例,對本發明的利用遠程應用處理本地文件的系統及方法進行了詳細描述,但本發明并不限于此。本領域普通技術人員能夠在說明書教導之下對本發明進行多種變換、替換和修改而不偏離本發明的精神和范圍。應該理解,所有這樣的變化、替換、修改仍然落入本發明的保護范圍之內。本發明的保護范圍由所附權利要求來限定。
權利要求
1.一種用于優化應用程序日志記錄的方法,包括: 識別應用程序中的原日志方法; 將所述原日志方法中的字符串參數分為常量部分和變量部分; 建立所述常量部分和變量部分間的對應關系標識; 利用所述常量部分、變量部分以及所述對應關系標識,構造優化日志方法; 通過代碼注入,將所述原日志方法替換為所述優化日志方法。
2.按權利要求1所述的方法,其中利用所述常量部分、變量部分以及對應關系標識,構造優化日志方法包括: 將所述對應關系標識分別加入所述常量部分和變量部分;以及 將含有所述對應關系標識的常量部分和變量部分合并,以構造優化日志方法。
3.按權利要求1或2所述的方法,其中將所述原日志方法中的字符串參數分為常量部分和變量部分包括: 響應于原日志方法中用于創建字符串參數的指令為處理常量字符串的常量參數指令,確定所述指令所創建的字符串參數為常量部分;以及 響應于原日志方法中用于創建字符串參數的指令為處理變量字符串的變量參數指令,確定所述指令所創建的字 符串參數為變量部分。
4.按權利要求3所述的方法,其中將所述原日志方法中的參數分為常量部分和變量部分進一步包括: 定位所述原日志方法中用于創建字符串參數的指令;以及 檢索所述原日志方法中用于創建字符串參數的指令。
5.按權利要求1或2所述的方法,其中識別應用程序中的原日志方法包括: 檢索所述應用程序的目標代碼;以及 在所述應用程序的類中識別具有特定名稱且用于處理字符串參數的原日志方法。
6.按權利要求1所述的方法,進一步包括: 利用所述優化日志方法生成所述應用程序的日志記錄。
7.按權利要求6所述的方法,其中利用所述優化日志方法生成所述應用程序的日志記錄包括: 將對應于所述常量部分的日志信息以及所述對應關系標識記錄在常量日志文件中;以及 將對應于所述變量部分的日志信息以及所述對應關系標識記錄在變量日志文件中。
8.按權利要求7所述的方法,其中所述對應于常量部分的日志信息僅被記錄一次,并且所述對應于變量部分的日志信息在每次被觸發時均被記錄。
9.一種用于優化應用程序日志記錄的系統,包括: 日志方法識別裝置,被配置為識別應用程序中的原日志方法; 參數劃分裝置,被配置為將所述原日志方法中的字符串參數分為常量部分和變量部分; 標識建立裝置,被配置為建立所述常量部分和變量部分間的對應關系標識; 優化日志方法構造裝置,被配置為利用所述常量部分、變量部分以及所述對應關系標識,構造優化日志方法;以及日志方法替換裝置,被配置為通過代碼注入,將所述原日志方法替換為所述優化日志方法。
10.按權利要求1所述的系統,其中優化日志方法構造裝置被配置為: 將所述對應關系標識分別加入所述常量部分和變量部分;以及 將含有所述對應關系標識的常量部分和變量部分合并,以構造優化日志方法。
11.按權利要求9或10所述的系統,其中參數劃分裝置被配置為: 響應于原日志方法中用于創建字符串參數的指令為處理常量字符串的常量參數指令,確定所述指令所創建的字符串參數為常量部分;以及 響應于原日志方法中用于創建字符串參數的指令為處理變量字符串的變量參數指令,確定所述指令所創建的字符串參數為變量部分。
12.按權利要求11所述的系統,其中參數劃分裝置被進一步配置為: 定位所述原日志方法中用于創建字符串參數的指令;以及 檢索所述原日志方法中用于創建字符串參數的指令。
13.按權利要求9或10所述的系統,其中日志方法識別裝置被配置為: 檢索所述應用程序的目標代碼;以及 在應用程序的類中識別具有特定名稱且用于處理字符串參數的原日志方法。
14.按權利要求9所述的系統,進一步包括: 日志記錄生成裝置,被配置為利用所述優化日志方法生成所述應用程序的日志記錄。
15.按權利要求14所述的系統,其中日志記錄生成裝置被配置為: 將對應于所述常量部分的日志信息以及所述對應關系標識記錄在常量日志文件中;以及 將對應于所述變量部分的日志信息以及所述對應關系標識記錄在變量日志文件中。
16.按權利要求15所述的系統, 其中所述對應于常量部分的日志信息僅被記錄一次,并且所述對應于變量部分的日志信息在每次被觸發時均被記錄。
全文摘要
本發明涉及應用程序日志技術領域。更具體地,本發明尤其涉及通過將應用程序中原有的日志方法進行優化并重新注入應用程序的方法和系統。根據本發明的一個方面,提供了一種用于優化應用程序日志記錄的方法,包括識別應用程序中的原日志方法;將所述原日志方法中的字符串參數分為常量部分和變量部分;建立所述常量部分和變量部分間的對應關系標識;利用所述常量部分、變量部分以及對應關系標識,構造優化日志方法;通過代碼注入,將所述應用程序中的原日志方法替換為所述優化日志方法。通過上述方法,可以減小日志記錄的硬盤存儲量以及IO操作頻率。
文檔編號G06F11/34GK103092742SQ20111033789
公開日2013年5月8日 申請日期2011年10月31日 優先權日2011年10月31日
發明者羅志達, 車漾, 王曄忻 申請人:國際商業機器公司