本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種日志分析方法及系統(tǒng)。
背景技術(shù):
目前,在各個領(lǐng)域中程序規(guī)模越來越龐大。因此,對程序的穩(wěn)定性,更新及時性等要求越來越高。對應(yīng)的程序日志庫非常多,比如glog,用于對程序的執(zhí)行進行記錄。日志庫可以幫助程序員和測試人員發(fā)現(xiàn)和解決程序bug。
由于日志庫僅具有單純的記錄功能,且日志庫中的日志信息數(shù)量特別大,因此程序員和測試人員在大量的日志信息中尋找程序出現(xiàn)bug的原因時工作量也相當(dāng)大;查詢?nèi)罩举M時費力,且目前日志記錄的日志信息往往不完整,很多時候,不能根據(jù)日志信息準確發(fā)現(xiàn)bug原因。導(dǎo)致許多程序不愿意添加日志信息。
如何,提高日志信息的利用率,使得程序員和測試人員能夠快速獲取日志分析結(jié)果,減輕程序員和測試人員分析日志信息的工作量,是本領(lǐng)域技術(shù)人員需要解決的技術(shù)問題。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的是提供一種日志分析方法及系統(tǒng),改進了舊有的只有單純的日志信息記錄功能,增加了日志分析功能,讓日志信息更加清晰,完整,方便查詢,極大的減輕了開發(fā)人員和測試人員的負擔(dān)。
為解決上述技術(shù)問題,本發(fā)明提供一種日志分析方法,包括:
調(diào)用日志生成接口輸出日志文件;
讀取所述日志文件,并利用設(shè)定的函數(shù)標(biāo)識定位程序?qū)?yīng)的源代碼位置;
根據(jù)所述源代碼位置,利用函數(shù)進入標(biāo)記和函數(shù)退出標(biāo)記記錄對應(yīng)的程序執(zhí)行流程,并讀取函數(shù)執(zhí)行耗時對應(yīng)數(shù)值作為程序執(zhí)行效率;
根據(jù)設(shè)定的輸出字段,獲取所述執(zhí)行流程中所述輸出字段對應(yīng)數(shù)值信息。
可選的,所述調(diào)用日志生成接口輸出日志文件,包括:
按照預(yù)定日志格式封裝日志生成接口;其中,所述預(yù)定日志格式包含程序名、類名、函數(shù)名、代碼行數(shù)、函數(shù)進入標(biāo)記、函數(shù)退出標(biāo)記、函數(shù)執(zhí)行耗時、日志等級以及輸出字段;
調(diào)用所述日志生成接口輸出具有所述預(yù)定日志格式的日志文件。
可選的,讀取所述日志文件,包括:
利用操作系統(tǒng)應(yīng)用程序編程接口將所述日志文件輸出到程序編輯器的輸出窗口;和/或,
利用庫函數(shù)將所述日志文件輸出到本體日志文件;和/或,
利用庫函數(shù)將所述日志文件輸出到控制臺;和/或,
利用tcp協(xié)議將所述日志文件輸出到網(wǎng)絡(luò)上的指定終端;和/或,
利用串行通訊端口將所述日志文件輸出到串口設(shè)備。
可選的,所述利用設(shè)定的函數(shù)標(biāo)識定位程序?qū)?yīng)的源代碼位置,包括:
通過所述程序名、所述類名、所述函數(shù)名以及所述代碼行數(shù)定位程序?qū)?yīng)的源代碼位置。
可選的,所述根據(jù)設(shè)定的輸出字段,獲取所述執(zhí)行流程中所述輸出字段對應(yīng)數(shù)值信息,包括:
根據(jù)設(shè)定的輸出字段,獲取所述執(zhí)行流程中所述輸出字段對應(yīng)數(shù)值信息;其中,所述輸出字段包括參數(shù)值字段、返回值字段、錯誤碼字段、錯誤信息字段以及調(diào)試信息字段。
可選的,獲取所述執(zhí)行流程中所述輸出字段對應(yīng)數(shù)值信息之后,還包括:
當(dāng)所述錯誤碼字段或所述錯誤信息字段存在對應(yīng)數(shù)值信息時,按照預(yù)定路徑發(fā)出報警信息。
可選的,本申請還包括:
根據(jù)設(shè)定的篩選信息對輸出的日志文件進行篩選。
本申請還提供一種日志分析系統(tǒng),包括:
輸出模塊,用于調(diào)用日志生成接口輸出日志文件;
讀取模塊,用于讀取所述日志文件;
定位模塊,用于利用設(shè)定的函數(shù)標(biāo)識定位程序?qū)?yīng)的源代碼位置;
第一信息獲取模塊,用于根據(jù)所述源代碼位置,利用函數(shù)進入標(biāo)記和函數(shù)退出標(biāo)記記錄對應(yīng)的程序執(zhí)行流程,并讀取函數(shù)執(zhí)行耗時對應(yīng)數(shù)值作為程序執(zhí)行效率;
第二信息獲取模塊,用于根據(jù)設(shè)定的輸出字段,獲取所述執(zhí)行流程中所述輸出字段對應(yīng)數(shù)值信息。
可選的,所述讀取模塊,包括:
第一讀取單元,用于利用操作系統(tǒng)應(yīng)用程序編程接口將所述日志文件輸出到程序編輯器的輸出窗口;和/或,
第二讀取單元,用于利用庫函數(shù)將所述日志文件輸出到本體日志文件;和/或,
第三讀取單元,用于利用庫函數(shù)將所述日志文件輸出到控制臺;和/或,
第四讀取單元,用于利用tcp協(xié)議將所述日志文件輸出到網(wǎng)絡(luò)上的指定終端;和/或,
第五讀取單元,用于利用串行通訊端口將所述日志文件輸出到串口設(shè)備。
可選的,本申請還包括:
篩選模塊,用于根據(jù)設(shè)定的篩選信息對輸出的日志文件進行篩選。
本發(fā)明所提供的一種日志分析方法,包括:調(diào)用日志生成接口輸出日志文件;讀取日志文件,并利用設(shè)定的函數(shù)標(biāo)識定位程序?qū)?yīng)的源代碼位置;根據(jù)源代碼位置,利用函數(shù)進入標(biāo)記和函數(shù)退出標(biāo)記記錄對應(yīng)的程序執(zhí)行流程,并讀取函數(shù)執(zhí)行耗時對應(yīng)數(shù)值作為程序執(zhí)行效率;根據(jù)設(shè)定的輸出字段,獲取執(zhí)行流程中輸出字段對應(yīng)數(shù)值信息;
可見,改進了舊有的只有單純的日志信息記錄功能,增加了日志分析功能,能夠定位程序?qū)?yīng)的源代碼位置,獲取程序執(zhí)行流程以及程序執(zhí)行效率,并能夠得到設(shè)定的輸出字段對應(yīng)數(shù)值信息;通過這些數(shù)據(jù)信息的自動獲取讓日志信息更加清晰,完整,方便查詢,極大的減輕了開發(fā)人員和測試人員的負擔(dān)。本發(fā)明還提供了一種日志分析系統(tǒng),具有上述有益效果,在此不再贅述。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實施例所提供的一種日志分析方法的流程圖;
圖2為本發(fā)明實施例所提供的一種日志分析系統(tǒng)的結(jié)構(gòu)框圖。
具體實施方式
本發(fā)明的核心是提供一種日志分析方法及系統(tǒng),改進了舊有的只有單純的日志信息記錄功能,增加了日志分析功能,讓日志信息更加清晰,完整,方便查詢,極大的減輕了開發(fā)人員和測試人員的負擔(dān)。
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
請參考圖1,圖1為本發(fā)明實施例所提供的一種日志分析方法的流程圖;該日志分析方法可以包括:
s100、調(diào)用日志生成接口輸出日志文件;
具體的,該步驟的不要目的是輸出日志文件,這里可以是輸出全部的日志文件,后續(xù)步驟再對該輸出的日志文件進行分析處理,或者對該輸出日志進行篩選后再進行分析處理;也可以是輸出指定的日志文件,即直接對原始日志文件進行篩選,輸出有用的日志文件,后續(xù)再對該日志文件進行分析處理,以提高日志分析的效率,避免硬件計算資源的浪費。例如,通過設(shè)定過濾字段,得到用戶需要關(guān)注的信息,過濾不需要關(guān)注的信息。
優(yōu)選的,為了后續(xù)進行日志分析時,可以快速獲取準確的日志信息,該步驟可以調(diào)整日志文件的輸出格式,即利用日志生成接口輸出具有一定格式的日志文件,本實施例并不對具體的格式信息進行限定,用戶可以根據(jù)自身程序應(yīng)用環(huán)境以及使用日志信息時的經(jīng)驗進行設(shè)定。例如這里的格式信息可以包含程序名、類名、函數(shù)名、代碼行數(shù)、函數(shù)進入標(biāo)記、函數(shù)退出標(biāo)記、函數(shù)執(zhí)行耗時、日志等級以及輸出字段等。例如可以使用c++語言按照設(shè)定的日志格式封裝成日志生成接口(日志生成庫),在應(yīng)用程序代碼里面調(diào)用日志生成接口生成日志。具體的,調(diào)用日志生成接口輸出日志文件可以包括:
按照預(yù)定日志格式封裝日志生成接口;其中,預(yù)定日志格式包含程序名、類名、函數(shù)名、代碼行數(shù)、函數(shù)進入標(biāo)記、函數(shù)退出標(biāo)記、函數(shù)執(zhí)行耗時、日志等級以及輸出字段;
調(diào)用日志生成接口輸出具有預(yù)定日志格式的日志文件。
具體的,按照定義的日志格式,封裝成日志生成接口;調(diào)用日志生成接口生成日志文件(即這里的日志生成接口根據(jù)原始日志文件生成日志文件即認為日志文件為該日志生成接口的輸出)。
s110、讀取日志文件,并利用設(shè)定的函數(shù)標(biāo)識定位程序?qū)?yīng)的源代碼位置;
具體的,讀取日志文件即讀取輸出的日志文件。讀取輸出的日志文件可以根據(jù)用戶后續(xù)使用的方便通過網(wǎng)絡(luò)等接收或讀取到任意設(shè)定位置或設(shè)備。即日志文件可以輸出到本體文件和/或通過網(wǎng)絡(luò)傳輸?shù)搅硪粋€終端。可選的,讀取日志文件可以包括:
利用操作系統(tǒng)應(yīng)用程序編程接口將日志文件輸出到程序編輯器的輸出窗口;例如過操作系統(tǒng)api輸出到ide(程序編輯器)的輸出窗口。和/或,
利用庫函數(shù)將日志文件輸出到本體日志文件;例如通過c++庫函數(shù)輸出到本地日志文件。和/或,
利用庫函數(shù)將日志文件輸出到控制臺;例如通過c++庫函數(shù)輸出到控制臺。和/或,
利用tcp協(xié)議將日志文件輸出到網(wǎng)絡(luò)上的指定終端;即通過tcp協(xié)議輸出到網(wǎng)絡(luò)上的其他接收終端。和/或,
利用串行通訊端口將日志文件輸出到串口設(shè)備;例如通過com口輸出到串口設(shè)備。
具體的,用戶可以根據(jù)自身的實際需求選擇相應(yīng)的讀取方式。即本實施例可以同時提供至少一種上述讀取方式。本實施例讀取方式的組合并不進行限定。
可選的,在讀取到日志文件后還可以通過設(shè)定過濾字段,得到用戶需要關(guān)注的信息,過濾不需要關(guān)注的信息。例如通過設(shè)置相應(yīng)參數(shù),過濾掉不需要關(guān)注的信息的方法可以包括:通過設(shè)定具體的類名、函數(shù)名、關(guān)鍵字和日志等級,篩選出設(shè)定符合設(shè)定要求的日志文件(即符合要求的日志信息)。通過這樣的篩選過程可以進一步提高后續(xù)日志分析的效率。
利用設(shè)定的函數(shù)標(biāo)識定位程序?qū)?yīng)的源代碼位置即根據(jù)用戶需求確定目標(biāo)代碼在源代碼中的位置。本實施例并不對具體的函數(shù)標(biāo)識進行限定,例如函數(shù)標(biāo)識可以是程序名、函數(shù)名等可以表示函數(shù)的標(biāo)識。具體可以是通過程序名、類名、函數(shù)名以及代碼行數(shù)定位程序?qū)?yīng)的源代碼位置。
s120、根據(jù)源代碼位置,利用函數(shù)進入標(biāo)記和函數(shù)退出標(biāo)記記錄對應(yīng)的程序執(zhí)行流程,并讀取函數(shù)執(zhí)行耗時對應(yīng)數(shù)值作為程序執(zhí)行效率;
具體的,該步驟可以通過函數(shù)進入標(biāo)記、函數(shù)退出標(biāo)記和函數(shù)執(zhí)行耗時得到程序執(zhí)行流程和程序執(zhí)行效率。這里的程序執(zhí)行效率即為一個程序的運行性能。
s130、根據(jù)設(shè)定的輸出字段,獲取執(zhí)行流程中輸出字段對應(yīng)數(shù)值信息。
具體的,本實施例并不限定輸出字段的具體內(nèi)容,例如輸出字段可以是參數(shù)值字段、返回值字段、錯誤碼字段、錯誤信息字段以及調(diào)試信息字段等。根據(jù)程序所應(yīng)用的領(lǐng)域以及要解決的程序的實際問題進行設(shè)置和修改。可選的,根據(jù)設(shè)定的輸出字段,獲取執(zhí)行流程中輸出字段對應(yīng)數(shù)值信息可以包括:
根據(jù)設(shè)定的輸出字段,獲取執(zhí)行流程中輸出字段對應(yīng)數(shù)值信息;其中,輸出字段包括參數(shù)值字段、返回值字段、錯誤碼字段、錯誤信息字段以及調(diào)試信息字段。即根據(jù)用戶的自定義輸出字段,得到程序執(zhí)行過程中的信息。
通過本實施例的分析過程,程序bug(一個錯誤的日志信息),程序運行流程和狀態(tài)(日志記錄了函數(shù)的調(diào)用流程即程序執(zhí)行流程)。從日志信息里,可以得到函數(shù)的執(zhí)行時間,錯誤信息在源代碼中的位置。函數(shù)參數(shù)傳遞的值,函數(shù)返回值程序執(zhí)行流程。程序員或者測試人員可以根據(jù)提取出的信息快速準確的對程序的問題進行定位分析,找到錯誤原因,提高工作效率。
用戶設(shè)置相應(yīng)的參數(shù)對得到的源代碼位置、程序執(zhí)行流程、程序執(zhí)行效率以及輸出字段對應(yīng)數(shù)值信息進行進一步的篩選,過濾掉不需要關(guān)注的信息。進一步上述幾處進行篩選的過程可以都進行,也可以僅在一處進行篩選,本實施例對此并不進行限定。即用戶可以在每一個步驟處自定義過濾條件。只關(guān)心某一個模塊,某一個cpp文件或者某一個函數(shù)的執(zhí)行情況,其他的日志信息被屏蔽。也可以運行完整的程序,得到完整的日志文件,統(tǒng)計出程序質(zhì)量(程序錯誤數(shù)量,執(zhí)行效率)。根據(jù)不同的適用場景輸出到不同的目標(biāo)上。
進一步,用戶可以根據(jù)得到的源代碼位置、程序執(zhí)行流程、程序執(zhí)行效率以及輸出字段對應(yīng)數(shù)值信息快速確定程序問題,節(jié)省用戶從海量日志信息中篩選出有用信息的時間。進一步可以對分析得到的數(shù)據(jù)進行統(tǒng)計分析,得到對應(yīng)程序的質(zhì)量報告。這樣程序員或者測試人員即可以通過質(zhì)量報告得到程序出現(xiàn)bug的原因,進而可以快速做出相應(yīng)的調(diào)整。進一步通過網(wǎng)絡(luò)實時接收或者從本地文件讀取到已保存的日志文件,根據(jù)預(yù)定的日志文件格式,分析日志。為了提高技術(shù)人員獲取關(guān)鍵信息的效率或者不要遺漏關(guān)鍵信息,可以用不同的顏色或者提示,展示程序代碼中的缺陷和bug。或者當(dāng)錯誤碼字段或錯誤信息字段存在對應(yīng)數(shù)值信息時,按照預(yù)定路徑發(fā)出報警信息。以便技術(shù)人員可以及時獲取程序的錯誤信息,盡快對程序進行修正。
基于上述技術(shù)方案,本發(fā)明實施例提的日志分析方法,除了能夠進行日志文件生成以外,還能對生成的日志文件進行分析,減輕了開發(fā)人員和測試人員的負擔(dān),智能化程度較高。在進行日志分析過程中,能夠針對實際需求,進行日志文件過濾,篩選出符合自己要求的日志信息,具備很強的實用性。且能夠?qū)υ闯绦虻膱?zhí)行效率、執(zhí)行流程、log等級、程序名、類名、函數(shù)名、代碼行數(shù)、參數(shù)值、返回值、錯誤碼和錯誤信息等都進行分析,功能多樣全面,為后續(xù)程序問題的解決提供了有力的數(shù)據(jù)支撐,大大提高了開發(fā)人員和測試人員的工作效率,及時性可靠性都能夠得到保證。
下面對本發(fā)明實施例提供的日志分析系統(tǒng)進行介紹,下文描述的日志分析系統(tǒng)與上文描述的日志分析方法可相互對應(yīng)參照。
請參考圖2,圖2為本發(fā)明實施例所提供的一種日志分析系統(tǒng)的結(jié)構(gòu)框圖;該系統(tǒng)可以包括:
輸出模塊100,用于調(diào)用日志生成接口輸出日志文件;
讀取模塊200,用于讀取日志文件;
定位模塊300,用于利用設(shè)定的函數(shù)標(biāo)識定位程序?qū)?yīng)的源代碼位置;
第一信息獲取模塊400,用于根據(jù)源代碼位置,利用函數(shù)進入標(biāo)記和函數(shù)退出標(biāo)記記錄對應(yīng)的程序執(zhí)行流程,并讀取函數(shù)執(zhí)行耗時對應(yīng)數(shù)值作為程序執(zhí)行效率;
第二信息獲取模塊500,用于根據(jù)設(shè)定的輸出字段,獲取執(zhí)行流程中輸出字段對應(yīng)數(shù)值信息。
基于上述實施例,讀取模塊200包括:
第一讀取單元,用于利用操作系統(tǒng)應(yīng)用程序編程接口將日志文件輸出到程序編輯器的輸出窗口;和/或,
第二讀取單元,用于利用庫函數(shù)將日志文件輸出到本體日志文件;和/或,
第三讀取單元,用于利用庫函數(shù)將日志文件輸出到控制臺;和/或,
第四讀取單元,用于利用tcp協(xié)議將日志文件輸出到網(wǎng)絡(luò)上的指定終端;和/或,
第五讀取單元,用于利用串行通訊端口將日志文件輸出到串口設(shè)備。
基于上述任意實施例,該系統(tǒng)還可以包括:
篩選模塊,用于根據(jù)設(shè)定的篩選信息對輸出的日志文件進行篩選。
說明書中各個實施例采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似部分互相參見即可。對于實施例公開的裝置而言,由于其與實施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。
專業(yè)人員還可以進一步意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
結(jié)合本文中所公開的實施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實施。軟件模塊可以置于隨機存儲器(ram)、內(nèi)存、只讀存儲器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動磁盤、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲介質(zhì)中。
以上對本發(fā)明所提供的一種日志分析方法及系統(tǒng)進行了詳細介紹。本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進行若干改進和修飾,這些改進和修飾也落入本發(fā)明權(quán)利要求的保護范圍內(nèi)。