本申請(qǐng)涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種日志信息的記錄方法及裝置。
背景技術(shù):
傳統(tǒng)技術(shù)中,日志文件中只記錄邏輯代碼(也稱程序)的運(yùn)行結(jié)果和/或入口參數(shù)等信息,當(dāng)邏輯代碼的運(yùn)行結(jié)果不符合預(yù)期時(shí),也即當(dāng)邏輯代碼運(yùn)行出現(xiàn)問(wèn)題時(shí),可以通過(guò)日志文件中的運(yùn)行結(jié)果和/或入口參數(shù)等信息,來(lái)對(duì)邏輯代碼的問(wèn)題進(jìn)行跟蹤,或者也可以通過(guò)單步調(diào)試的方法,即一步一步執(zhí)行邏輯代碼的方法,來(lái)對(duì)邏輯代碼的問(wèn)題進(jìn)行跟蹤;然而該兩種方法只適用于線下對(duì)邏輯代碼的問(wèn)題進(jìn)行跟蹤,當(dāng)邏輯代碼被發(fā)布上線之后,特別是當(dāng)該邏輯代碼被頻繁調(diào)用時(shí),根據(jù)當(dāng)前日志文件中記載的內(nèi)容,不能快速對(duì)邏輯代碼的問(wèn)題進(jìn)行跟蹤。
因此,需要提供一種日志信息的記錄方法,以便能夠根據(jù)記錄的日志信息,快速地對(duì)發(fā)布上線的邏輯代碼的問(wèn)題進(jìn)行跟蹤。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供了一種日志信息的記錄方法及裝置,可以有效對(duì)服務(wù)接口的一次調(diào)用請(qǐng)求的日志信息進(jìn)行記錄,從而可以有效對(duì)服務(wù)接口的邏輯代碼的問(wèn)題進(jìn)行跟蹤。
第一方面,提供了一種日志信息的記錄方法,該方法包括:
當(dāng)服務(wù)端接收到對(duì)服務(wù)接口的調(diào)用請(qǐng)求時(shí),生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào),所述跟蹤標(biāo)識(shí)號(hào)用于唯一的標(biāo)識(shí)一次調(diào)用請(qǐng)求;
執(zhí)行所述服務(wù)接口的邏輯代碼,其中,所述邏輯代碼包含多個(gè)分支代碼,每個(gè)分支代碼通過(guò)編號(hào)進(jìn)行標(biāo)識(shí);
若所述多個(gè)分支代碼中的第一分支代碼被執(zhí)行,則將所述跟蹤標(biāo)識(shí)號(hào)、所述第一分支代碼的編號(hào)以及執(zhí)行結(jié)果的對(duì)應(yīng)關(guān)系輸出到日志文件中。
第二方面,提供了一種日志信息的記錄裝置,該裝置包括:生成單元、執(zhí)行單元和輸出單元;
所述生成單元,用于當(dāng)服務(wù)端接收到對(duì)服務(wù)接口的調(diào)用請(qǐng)求時(shí),生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào),所述跟蹤標(biāo)識(shí)號(hào)用于唯一的標(biāo)識(shí)一次調(diào)用請(qǐng)求;
所述執(zhí)行單元,用于執(zhí)行所述服務(wù)接口的邏輯代碼,其中,所述邏輯代碼包含多個(gè)分支代碼,每個(gè)分支代碼通過(guò)編號(hào)進(jìn)行標(biāo)識(shí);
所述輸出單元,用于若所述多個(gè)分支代碼中的第一分支代碼被執(zhí)行,則將所述跟蹤標(biāo)識(shí)號(hào)、所述第一分支代碼的編號(hào)以及執(zhí)行結(jié)果的對(duì)應(yīng)關(guān)系輸出到日志文件中。
本申請(qǐng)?zhí)峁┑娜罩拘畔⒌挠涗浄椒把b置,在服務(wù)端接收到服務(wù)接口的調(diào)用請(qǐng)求時(shí),生成與調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào);之后,在執(zhí)行服務(wù)接口的邏輯代碼時(shí),將跟蹤標(biāo)識(shí)號(hào)、被執(zhí)行分支代碼的編號(hào)以及執(zhí)行結(jié)果的對(duì)應(yīng)關(guān)系輸出到日志文件中。也即本申請(qǐng)中,通過(guò)跟蹤標(biāo)識(shí)號(hào)來(lái)標(biāo)識(shí)服務(wù)接口的一次調(diào)用請(qǐng)求,并通過(guò)在日志文件中記錄該跟蹤標(biāo)識(shí)號(hào)與被執(zhí)行分支代碼的編號(hào)的對(duì)應(yīng)關(guān)系,來(lái)確定響應(yīng)服務(wù)接口的一次調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的分支代碼;從而在服務(wù)接口的一次調(diào)用請(qǐng)求的請(qǐng)求結(jié)果不符合預(yù)期時(shí),通過(guò)對(duì)該次調(diào)用請(qǐng)求中被執(zhí)行代碼及其執(zhí)行結(jié)果的分析,來(lái)對(duì)出現(xiàn)的問(wèn)題進(jìn)行追蹤。
附圖說(shuō)明
圖1為本申請(qǐng)一種實(shí)施例提供的日志信息的記錄方法流程圖;
圖2為本申請(qǐng)?zhí)峁┑倪壿嫶a的示意圖;
圖3為本申請(qǐng)?zhí)峁┑囊环N日志文件的示意圖;
圖4為本申請(qǐng)?zhí)峁┑牧硪环N日志文件的示意圖;
圖5為本申請(qǐng)?zhí)峁┑娜罩疚募淖x取方法流程圖;
圖6為本申請(qǐng)另一種實(shí)施例提供的日志信息的記錄裝置示意圖。
具體實(shí)施方式
下面結(jié)合附圖,對(duì)本發(fā)明的實(shí)施例進(jìn)行描述。
本申請(qǐng)實(shí)施例提供的日志信息的記錄方法及裝置,適用于服務(wù)端在響應(yīng)對(duì)服務(wù)接口的調(diào)用請(qǐng)求時(shí),對(duì)服務(wù)接口的邏輯代碼的執(zhí)行結(jié)果進(jìn)行記錄的場(chǎng)景,尤其適用于對(duì)服務(wù)接口的邏輯代碼中多個(gè)分支代碼的執(zhí)行結(jié)果進(jìn)行記錄的場(chǎng)景。其中,服務(wù)接口是指服務(wù)端提供給客戶端使用其功能的入口,即每個(gè)服務(wù)接口可以對(duì)應(yīng)一個(gè)功能,也即客戶端通過(guò)對(duì)服務(wù)端的服務(wù)接口的調(diào)用,可以執(zhí)行一次業(yè)務(wù)操作。此處的多個(gè)分支代碼可以通過(guò)預(yù)設(shè)的編號(hào)進(jìn)行標(biāo)識(shí),其中,預(yù)設(shè)的編號(hào)可以是任一能體現(xiàn)其唯一性的信息。在一個(gè)例子中,該預(yù)設(shè)的編號(hào)可以由字母和數(shù)字構(gòu)成,且具有順序性。如,該預(yù)設(shè)的編號(hào)可以為:“-bk-1”、“-bk-2”、“-bk-3”等。
需要說(shuō)明的是,上述預(yù)設(shè)的編號(hào)可以是由開(kāi)發(fā)人員在編寫服務(wù)接口的邏輯代碼時(shí)設(shè)置在各分支代碼中的。在服務(wù)接口的邏輯代碼中為分支代碼設(shè)置預(yù)設(shè)的編號(hào)后,在調(diào)用服務(wù)接口時(shí),也即在執(zhí)行服務(wù)接口對(duì)應(yīng)的功能時(shí),就可以將響應(yīng)調(diào)用請(qǐng)求的過(guò)程中的相關(guān)信息輸出到日志文件中,此處的相關(guān)信息可以包括分支代碼的編號(hào)、執(zhí)行結(jié)果以及接口參數(shù)等。此處的日志文件可以是與服務(wù)接口對(duì)應(yīng)的日志文件,即該日志文件中可以記錄響應(yīng)服務(wù)接口的多次調(diào)用請(qǐng)求的過(guò)程中的相關(guān)信息,其中,每次調(diào)用請(qǐng)求中被執(zhí)行的分支代碼可以通過(guò)跟蹤標(biāo)識(shí)號(hào)進(jìn)行識(shí)別。
圖1為本申請(qǐng)一種實(shí)施例提供的日志信息的記錄方法流程圖,所述方法的執(zhí)行主體可以為具有處理能力的設(shè)備:服務(wù)器或者系統(tǒng)或者裝置,如圖1 所示,所述方法具體可以包括:
步驟110,當(dāng)服務(wù)端接收到對(duì)服務(wù)接口的調(diào)用請(qǐng)求時(shí),生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào),所述跟蹤標(biāo)識(shí)號(hào)用于唯一的標(biāo)識(shí)一次調(diào)用請(qǐng)求。
此處的調(diào)用請(qǐng)求可以是由客戶端發(fā)送的。具體地,服務(wù)端在接收到對(duì)服務(wù)接口的調(diào)用請(qǐng)求時(shí),可以啟動(dòng)相應(yīng)的線程,啟動(dòng)后的線程向上述服務(wù)接口發(fā)送調(diào)用請(qǐng)求,以完成對(duì)服務(wù)接口的邏輯代碼的執(zhí)行。
在一個(gè)例子中,步驟110中生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào),具體可以為:
獲取所述服務(wù)端的互聯(lián)網(wǎng)協(xié)議(internetprotocol,ip)地址以及當(dāng)前時(shí)間信息;
根據(jù)所述ip地址、當(dāng)前時(shí)間信息以及預(yù)設(shè)閾值,生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào)。
舉例來(lái)說(shuō),當(dāng)服務(wù)接口的邏輯代碼通過(guò)java語(yǔ)言編寫時(shí),則可以通過(guò)函數(shù):inetaddress.gethostaddress()來(lái)獲取服務(wù)端的ip地址;之后可以對(duì)服務(wù)端的ip地址進(jìn)行以下處理:去除ip地址中的點(diǎn)號(hào),得到四個(gè)數(shù)字;對(duì)于四個(gè)數(shù)字中的每個(gè)數(shù)字,可以將其轉(zhuǎn)換成對(duì)應(yīng)的十六進(jìn)制數(shù)據(jù),其中每個(gè)數(shù)字的轉(zhuǎn)換過(guò)程可以為:將該數(shù)字賦值給變量ipnum,之后最后通過(guò)使用函數(shù):integer.tohexstring(ipnum),就可以得到對(duì)應(yīng)的兩位十六進(jìn)制數(shù)據(jù);此處,若任一數(shù)字轉(zhuǎn)換得到的十六進(jìn)制數(shù)據(jù)不足兩位,則可以用0前綴補(bǔ)充??梢岳斫獾氖牵瑢⑺膫€(gè)數(shù)字中的每個(gè)數(shù)字均轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制數(shù)據(jù)之后,就可以得到八位的十六進(jìn)制數(shù)據(jù)。舉例來(lái)說(shuō),假設(shè)獲取的服務(wù)端的ip地址為:1.1.1.1,去除ip地址中的點(diǎn)號(hào)之后,得到四個(gè)數(shù)字:1、1、1以及1;將該四個(gè)數(shù)字轉(zhuǎn)換為對(duì)應(yīng)的十六進(jìn)制數(shù)據(jù)之后,仍為:1、1、1以及1,因?yàn)榫蛔銉晌?,則0前綴補(bǔ)充,也即最終得到的八位的十六進(jìn)制數(shù)據(jù)為:01010101。
此外,可以通過(guò)函數(shù):system.currenttimemillis()來(lái)獲取當(dāng)前時(shí)間的毫秒數(shù);此外,因?yàn)橐慌_(tái)服務(wù)器一個(gè)毫秒內(nèi)可能會(huì)同時(shí)接收到多個(gè)調(diào)用請(qǐng)求, 為了為每個(gè)調(diào)用請(qǐng)求生成不同的跟蹤標(biāo)識(shí)號(hào),本申請(qǐng)還可以預(yù)先設(shè)定閾值,該預(yù)設(shè)閾值可以是一個(gè)八位的自增序列值,如,初始時(shí)該自增序列值為1,當(dāng)在同一毫秒內(nèi)接收到下一個(gè)調(diào)用請(qǐng)求時(shí),則自增序列值變?yōu)?,以此類推,直至該自增序列值達(dá)到9999999時(shí),再?gòu)?重新開(kāi)始累加,即可重復(fù)使用。通過(guò)將服務(wù)端的ip地址、當(dāng)前時(shí)間的毫秒數(shù)以及自增序列值組合在一起,就可以生成跟蹤標(biāo)識(shí)號(hào)。因?yàn)楦鶕?jù)業(yè)務(wù)處理量估算指令請(qǐng)求量,在同一毫秒內(nèi)一臺(tái)服務(wù)器的調(diào)用請(qǐng)求不可能超過(guò)9999999,因此,上述跟蹤標(biāo)識(shí)號(hào)的生成方法可以確保其唯一性。在一個(gè)例子中,生成的跟蹤標(biāo)識(shí)號(hào)可以為:0a0d87d114544049250931001。
當(dāng)然,在實(shí)際應(yīng)用中,也可以通過(guò)其它方法生成跟蹤標(biāo)識(shí)號(hào),只要能夠確保其唯一性即可,本申請(qǐng)對(duì)此不作限定。
可以理解的是,服務(wù)接口的一次調(diào)用請(qǐng)求由一個(gè)線程進(jìn)行響應(yīng),因此可以將生成的唯一的跟蹤標(biāo)識(shí)號(hào)設(shè)置到響應(yīng)線程上下文中。以邏輯代碼通過(guò)java語(yǔ)言實(shí)現(xiàn)為例,當(dāng)跟蹤標(biāo)識(shí)號(hào)表示為traceid時(shí),將跟蹤標(biāo)識(shí)號(hào)設(shè)置到響應(yīng)線程上下文的實(shí)現(xiàn)代碼可以為:threadlocal.set(traceid)。
步驟120,執(zhí)行所述服務(wù)接口的邏輯代碼,其中,所述邏輯代碼包含多個(gè)分支代碼,每個(gè)分支代碼通過(guò)編號(hào)進(jìn)行標(biāo)識(shí)。
具體地,在接收到響應(yīng)線程發(fā)送的調(diào)用請(qǐng)求之后,就可以執(zhí)行服務(wù)接口的邏輯代碼,該邏輯代碼可以包括多個(gè)分支代碼。在一個(gè)例子中,每個(gè)分支代碼是通過(guò)所述服務(wù)接口的接口參數(shù)的不同取值確定的。舉例來(lái)說(shuō),服務(wù)接口的邏輯代碼如下所示,其中,a為服務(wù)接口的接口參數(shù)。
…
if(a≤1){…};
elseif(1<a≤2){…};
else{…};
…
在上述示例中,每一行即為邏輯代碼中的一個(gè)分支代碼,即當(dāng)接口參數(shù)a的取值不大于1時(shí),執(zhí)行第一個(gè)分支代碼;當(dāng)接口參數(shù)a的取值大于1且不大于2時(shí),執(zhí)行第二個(gè)分支代碼;否則當(dāng)接口參數(shù)a的取值大于2時(shí),則執(zhí)行第三個(gè)分支代碼。
在此說(shuō)明,受限于篇幅,示例中只列出了服務(wù)接口的一個(gè)接口參數(shù)以及三個(gè)分支代碼,實(shí)際上邏輯代碼中可能會(huì)包括服務(wù)接口的幾十個(gè)接口參數(shù),且可能會(huì)包括上百個(gè)分支代碼。
還需要說(shuō)明的是,邏輯代碼中的多個(gè)分支代碼可以通過(guò)預(yù)設(shè)的編號(hào)進(jìn)行標(biāo)識(shí),其中,預(yù)設(shè)的編號(hào)可以是任一能體現(xiàn)其唯一性的信息。在一個(gè)例子中,該預(yù)設(shè)的編號(hào)可以由字母和數(shù)字構(gòu)成,且具有順序性。如,該預(yù)設(shè)的編號(hào)可以為:“-bk-1”、“-bk-2”、“-bk-3”等。
上述預(yù)設(shè)的編號(hào)可以是由開(kāi)發(fā)人員在編寫服務(wù)接口的邏輯代碼時(shí)設(shè)置在各分支代碼中的;此外,開(kāi)發(fā)人員還可以在服務(wù)接口的邏輯代碼中設(shè)置跟蹤標(biāo)識(shí)號(hào)。參見(jiàn)圖2所示的邏輯代碼示意圖,圖2中的“-bk-1”、“-bk-2”、“-bk-3”、…、“-bk-7”即為開(kāi)發(fā)人員預(yù)先設(shè)置在邏輯代碼中的分支代碼的編號(hào);此外,還可以通過(guò)函數(shù)threadlocal.get()來(lái)實(shí)時(shí)獲取響應(yīng)當(dāng)前調(diào)用請(qǐng)求的過(guò)程中生成的跟蹤標(biāo)識(shí)號(hào),以便在服務(wù)接口的日志文件中輸出該次調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào)以及分支代碼的編號(hào)的對(duì)應(yīng)關(guān)系。
步驟130,若所述多個(gè)分支代碼中的第一分支代碼被執(zhí)行,則將所述跟蹤標(biāo)識(shí)號(hào)、所述第一分支代碼的編號(hào)以及執(zhí)行結(jié)果的對(duì)應(yīng)關(guān)系輸出到日志文件中。
此處的日志文件可以是與服務(wù)接口對(duì)應(yīng)的日志文件,即該日志文件中可以記錄響應(yīng)服務(wù)接口的多次調(diào)用請(qǐng)求的過(guò)程中的相關(guān)信息,其中,每次調(diào)用請(qǐng)求中被執(zhí)行的分支代碼可以通過(guò)跟蹤標(biāo)識(shí)號(hào)進(jìn)行識(shí)別。此外,上述第一分支代碼可以為多個(gè)分支代碼中的任一分支代碼。
可以理解的是,雖然服務(wù)接口的邏輯代碼中包含多個(gè)分支代碼,但是在 響應(yīng)服務(wù)接口的一次調(diào)用請(qǐng)求的過(guò)程中,也即在執(zhí)行一次業(yè)務(wù)操作的過(guò)程中,可能只有部分分支代碼被執(zhí)行,因此,在日志文件中只需記錄響應(yīng)一次調(diào)用請(qǐng)求的過(guò)程中被執(zhí)行的分支代碼即可。
在一個(gè)例子中,日志文件中記錄的日志信息可以如圖3所示,從圖3中可以看出,當(dāng)前調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào)為:0a0d87d114544049250931001,而響應(yīng)當(dāng)前調(diào)用請(qǐng)求的過(guò)程中被執(zhí)行的分支代碼的編號(hào)分別為:p-b-1、p-b-3、p-b-6、p-b-14、p-b-15和p-b-18。此外,圖3中的日志信息還可以包括服務(wù)接口的入口參數(shù)以及每個(gè)分支代碼的執(zhí)行結(jié)果。由此,可以看出,本申請(qǐng)的日志文件中在記錄分支代碼的入口參數(shù)以及執(zhí)行結(jié)果的同時(shí),還記錄了響應(yīng)當(dāng)前調(diào)用請(qǐng)求的過(guò)程中生成的跟蹤標(biāo)識(shí)號(hào)以及被執(zhí)行分支代碼的編號(hào),從而可以方便開(kāi)發(fā)人員在確定本次調(diào)用請(qǐng)求的請(qǐng)求結(jié)果不符合預(yù)期時(shí),通過(guò)對(duì)日志文件中記錄的編號(hào)對(duì)應(yīng)的分支代碼及其執(zhí)行結(jié)果的分析來(lái)對(duì)出現(xiàn)的問(wèn)題進(jìn)行跟蹤。
需要說(shuō)明的是,圖3所示的日志文件中,對(duì)每個(gè)分支代碼,都會(huì)記錄相應(yīng)的跟蹤標(biāo)識(shí)號(hào),以便根據(jù)跟蹤標(biāo)識(shí)號(hào),可以讀取到響應(yīng)該跟蹤標(biāo)識(shí)號(hào)標(biāo)識(shí)的調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的分支代碼;也即圖3所示的日志文件中記錄了分支匹配摘要信息。
可以理解的是,由于服務(wù)端(服務(wù)集群)可以對(duì)同一服務(wù)接口的多次調(diào)用請(qǐng)求進(jìn)行同時(shí)響應(yīng),因此,圖3所示的日志文件中還可以包括其它跟蹤標(biāo)識(shí)號(hào)、響應(yīng)其它跟蹤標(biāo)識(shí)號(hào)對(duì)應(yīng)的調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的分支代碼的編號(hào)以及執(zhí)行結(jié)果的對(duì)應(yīng)關(guān)系;其分支匹配摘要信息的記錄方法同圖3中的記錄方法類似,在此不復(fù)贅述。可以理解的是,多次調(diào)用請(qǐng)求的分支匹配摘要信息間隔排列,也即響應(yīng)一次調(diào)用請(qǐng)求的過(guò)程中的分支匹配信息則被記錄在不連續(xù)的行。具體地,可參見(jiàn)如下示例:
跟蹤標(biāo)識(shí)號(hào)1分支1執(zhí)行結(jié)果1;
跟蹤標(biāo)識(shí)號(hào)2分支1執(zhí)行結(jié)果2;
跟蹤標(biāo)識(shí)號(hào)1分支3執(zhí)行結(jié)果3;
…
在執(zhí)行完成服務(wù)接口的邏輯代碼之后,也即在執(zhí)行完成一次業(yè)務(wù)操作之后,服務(wù)端就可以向客戶端返回業(yè)務(wù)操作的執(zhí)行結(jié)果;該執(zhí)行結(jié)果可以是業(yè)務(wù)操作被正確執(zhí)行時(shí)返回的正確結(jié)果,也可以是業(yè)務(wù)操作執(zhí)行失敗時(shí)返回的錯(cuò)誤結(jié)果。
需要說(shuō)明的是,在向客戶端返回執(zhí)行結(jié)果之后,還可以將本次調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào)輸出到另一日志文件中,如圖4所示,該另一日志文件可以是用于記錄響應(yīng)本次調(diào)用請(qǐng)求時(shí)的摘要信息,如,服務(wù)接口的名稱、參數(shù)信息以及跟蹤標(biāo)識(shí)號(hào)等。當(dāng)然,在實(shí)際應(yīng)用中,也可以將上述摘要信息直接輸出到圖3所示的日志文件中,本申請(qǐng)對(duì)此不作限定。
可以理解的是,在服務(wù)接口的一次調(diào)用請(qǐng)求開(kāi)始時(shí),將生成的跟蹤標(biāo)識(shí)號(hào)設(shè)置到響應(yīng)線程的上下文中;當(dāng)該次調(diào)用請(qǐng)求相應(yīng)結(jié)束之后,則需要對(duì)線程的上下文進(jìn)行清理,如,移除跟蹤標(biāo)識(shí)號(hào)等,以便該線程可以被重復(fù)使用。
在生成本申請(qǐng)的圖3以及圖4所示的日志文件之后,當(dāng)服務(wù)接口的一次調(diào)用請(qǐng)求的請(qǐng)求結(jié)果為錯(cuò)誤結(jié)果時(shí),也即不符合預(yù)期時(shí),本申請(qǐng)還可以提供圖5所示的讀取日志文件的方法來(lái)讀取響應(yīng)該次調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的分支代碼,從而通過(guò)對(duì)這些分支代碼及其執(zhí)行結(jié)果的分析,來(lái)對(duì)響應(yīng)本次調(diào)用請(qǐng)求時(shí)的問(wèn)題進(jìn)行跟蹤;如圖5所示,本申請(qǐng)實(shí)施例包括如下步驟:
步驟510,接收用戶輸入的查詢指令,所述查詢指令中包含跟蹤標(biāo)識(shí)號(hào)以及日志文件的名稱。
此處,跟蹤標(biāo)識(shí)號(hào)可以是根據(jù)服務(wù)接口的名稱、日志文件的名稱以及接口參數(shù),從圖4所示的日志文件中讀取到的,其中,服務(wù)接口的名稱、日志文件的名稱以及接口參數(shù)都是可以預(yù)先獲知的,如,可以通過(guò)如下命令行讀?。?/p>
$grepcustomersearchfacade/opt/logs/rpc-server-digest.log|grep 張三|grep33010;
其中,“customersearchfacade”為服務(wù)接口的名稱,“rpc-server-digest.log”為圖4所示的日志文件的名稱,“張三”以及“33010”等為接口參數(shù);通過(guò)上述命令從圖4所示的日志文件中讀取到的跟蹤標(biāo)識(shí)號(hào)可以為:0a0d87d114544049250931001。
步驟520,根據(jù)所述日志文件的名稱,獲取相應(yīng)的日志文件。
步驟530,根據(jù)所述跟蹤標(biāo)識(shí)號(hào),從所述日志文件中讀取與所述跟蹤標(biāo)識(shí)號(hào)相對(duì)應(yīng)的所述多個(gè)分支代碼的編號(hào)以及執(zhí)行結(jié)果。
在讀取到上述跟蹤標(biāo)識(shí)號(hào)之后,就可以根據(jù)跟蹤標(biāo)識(shí)號(hào)以及日志文件的名稱,從圖3所示的日志文件中讀取響應(yīng)本次調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的各分支代碼的編號(hào)了。如,可以通過(guò)如下命令行讀?。?/p>
$grep0a0d87d114544049250931001search-digest.7dt.log
其中,“search-digest.7dt.log”為圖3所示的日志文件的名稱;即首先根據(jù)“search-digest.7dt.log”,獲取圖3所示的日志文件;之后,從該日志文件中讀取與“0a0d87d114544049250931001”相對(duì)應(yīng)的分支代碼的編號(hào):p-b-1、p-b-3、p-b-6、p-b-14、p-b-15和p-b-18以及執(zhí)行結(jié)果,此外,還可以讀取到每個(gè)分支代碼的接口參數(shù)??梢岳斫獾氖牵?yàn)閳D3所示的日志文件中只記錄了響應(yīng)一次調(diào)用請(qǐng)求的過(guò)程中記錄的執(zhí)行的各分支代碼的編號(hào),因此,該步驟中讀取的結(jié)果即為圖3所示的內(nèi)容。
開(kāi)發(fā)人員通過(guò)對(duì)響應(yīng)本次調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的各分支代碼及其執(zhí)行結(jié)果進(jìn)行分析,即可快速地對(duì)出現(xiàn)的問(wèn)題進(jìn)行跟蹤,從而可以快速定位到問(wèn)題原因,進(jìn)而解決客戶端請(qǐng)求不到正確結(jié)果的問(wèn)題,避免影響擴(kuò)大。
綜上,由于本申請(qǐng)的日志文件中記錄了調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào),同時(shí)記錄了響應(yīng)一次調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的分支代碼的編號(hào);由此,當(dāng)一次調(diào)用請(qǐng)求的請(qǐng)求結(jié)果不符合預(yù)期時(shí),可以根據(jù)日志文件中記錄的分支代碼的編號(hào),快速地確定出響應(yīng)當(dāng)前調(diào)用請(qǐng)求的過(guò)程中執(zhí)行的分支代碼,通過(guò)對(duì)執(zhí) 行的分支代碼的執(zhí)行結(jié)果的分析,就可以快速的對(duì)問(wèn)題進(jìn)行定位。
與上述日志信息的記錄方法對(duì)應(yīng)地,本申請(qǐng)實(shí)施例還提供的一種日志信息的記錄裝置,如圖6所示,該裝置包括:生成單元601、執(zhí)行單元602和輸出單元603。
生成單元601,用于當(dāng)服務(wù)端接收到對(duì)服務(wù)接口的調(diào)用請(qǐng)求時(shí),生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào),所述跟蹤標(biāo)識(shí)號(hào)用于唯一的標(biāo)識(shí)一次調(diào)用請(qǐng)求。
其中,生成單元601具體用于:
獲取所述服務(wù)端的互聯(lián)網(wǎng)協(xié)議ip地址以及當(dāng)前時(shí)間信息;
根據(jù)所述ip地址、當(dāng)前時(shí)間信息以及預(yù)設(shè)閾值,生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào)。
執(zhí)行單元602,用于執(zhí)行所述服務(wù)接口的邏輯代碼,其中,所述邏輯代碼包含多個(gè)分支代碼,每個(gè)分支代碼通過(guò)編號(hào)進(jìn)行標(biāo)識(shí)。
其中,所述多個(gè)分支代碼可以是通過(guò)所述服務(wù)接口的接口參數(shù)的不同取值確定的。
輸出單元603,用于若所述多個(gè)分支代碼中的第一分支代碼被執(zhí)行,則將所述跟蹤標(biāo)識(shí)號(hào)、所述第一分支代碼的編號(hào)以及執(zhí)行結(jié)果的對(duì)應(yīng)關(guān)系輸出到日志文件中。
可選地,所述裝置還包括:接收單元604和讀取單元605。
接收單元604,用于接收用戶輸入的查詢指令,所述查詢指令中包含所述跟蹤標(biāo)識(shí)號(hào)以及所述日志文件的名稱。
讀取單元605,用于根據(jù)所述日志文件的名稱,獲取所述日志文件,并從所述日志文件中讀取與所述跟蹤標(biāo)識(shí)號(hào)相對(duì)應(yīng)的多個(gè)被執(zhí)行的分支代碼的編號(hào)以及執(zhí)行結(jié)果。
可選地,輸出單元603還用于將所述服務(wù)接口的名稱、參數(shù)信息以及所述跟蹤標(biāo)識(shí)號(hào)輸出到另一日志文件中。
本申請(qǐng)實(shí)施例裝置的各功能模塊的功能,可以通過(guò)上述方法實(shí)施例的各步驟來(lái)實(shí)現(xiàn),因此,本申請(qǐng)?zhí)峁┑难b置的具體工作過(guò)程,在此不復(fù)贅述。
本申請(qǐng)?zhí)峁┑娜罩拘畔⒌挠涗浹b置,當(dāng)服務(wù)端接收到對(duì)服務(wù)接口的調(diào)用請(qǐng)求時(shí),生成單元601生成與所述調(diào)用請(qǐng)求對(duì)應(yīng)的跟蹤標(biāo)識(shí)號(hào);執(zhí)行單元602執(zhí)行所述服務(wù)接口的邏輯代碼,其中,所述邏輯代碼包含多個(gè)分支代碼,每個(gè)分支代碼通過(guò)編號(hào)進(jìn)行標(biāo)識(shí);若所述多個(gè)分支代碼中的第一分支代碼被執(zhí)行,輸出單元603將所述跟蹤標(biāo)識(shí)號(hào)、所述第一分支代碼的編號(hào)以及執(zhí)行結(jié)果的對(duì)應(yīng)關(guān)系輸出到日志文件中。由此,可以有效對(duì)服務(wù)接口的一次調(diào)用請(qǐng)求的日志信息進(jìn)行記錄,從而可以有效對(duì)服務(wù)接口的邏輯代碼的問(wèn)題進(jìn)行跟蹤。
專業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的對(duì)象及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來(lái)實(shí)現(xiàn),為了清楚地說(shuō)明硬件和軟件的可互換性,在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本申請(qǐng)的范圍。
結(jié)合本文中所公開(kāi)的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(ram)、內(nèi)存、只讀存儲(chǔ)器(rom)、電可編程rom、電可擦除可編程rom、寄存器、硬盤、可移動(dòng)磁盤、cd-rom、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上所述的具體實(shí)施方式,對(duì)本申請(qǐng)的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,所應(yīng)理解的是,以上所述僅為本申請(qǐng)的具體實(shí)施方式而已,并不用于限定本申請(qǐng)的保護(hù)范圍,凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的保護(hù)范圍之內(nèi)。