欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種日志生成方法及系統(tǒng)與流程

文檔序號:11154215閱讀:419來源:國知局
一種日志生成方法及系統(tǒng)與制造工藝
本發(fā)明涉及數(shù)據(jù)處理
技術(shù)領(lǐng)域
,特別涉及一種日志生成方法及系統(tǒng)。
背景技術(shù)
:應(yīng)用程序或服務(wù)端程序在運(yùn)行時(shí),由于業(yè)務(wù)的復(fù)雜及問題排查或業(yè)務(wù)日志記錄等都需要實(shí)時(shí)的向文件中寫入特殊的日志信息。所以程序的日志記錄是生產(chǎn)環(huán)境中必需要用到的基本技術(shù)。它有助于問題的排查及系統(tǒng)狀態(tài)的展示等作用。對于小批量日志輸出,無論用什么方法都基本夠用。但是一旦程序是復(fù)雜的,而且性能要求極高,又必須輸出大量日志信息時(shí)。那常規(guī)的日志記錄反而會影響正常的業(yè)務(wù)程序運(yùn)行。目前,日志記錄方法可以包括常規(guī)方法,通過網(wǎng)絡(luò)推送日志,加裝固態(tài)硬盤方法這三種。其中,常規(guī)方法:就是在需要輸出日志的代碼行中,對磁盤IO進(jìn)行直接操作,將程序中的特殊信息組成一個(gè)字符串寫入到磁盤中。通過網(wǎng)絡(luò)推送日志:通過網(wǎng)絡(luò)如UDP協(xié)議,將日志數(shù)據(jù)推送給一臺或多臺電腦后,異步的將日志數(shù)據(jù)寫入磁盤中。加裝固態(tài)硬盤方法:通過加裝固態(tài)硬盤來提升IO性能,達(dá)到寫日志性能的提升。但是上述各種方法都存在對應(yīng)的缺點(diǎn)。其中,常規(guī)方法:沒有采取任務(wù)優(yōu)化措施,在系統(tǒng)進(jìn)行大量日志輸出時(shí),會因?yàn)閷懭罩拘阅苓^慢而影響正常的業(yè)務(wù)處理性能。反而會因?yàn)槿罩玖窟^大而影響生產(chǎn)。所以往往會將日志根據(jù)條件進(jìn)行簡化輸出,但簡化輸出后,往往得不到詳細(xì)的日志數(shù)據(jù)。一旦出問題。排查問題異常困難。而大量的日志記錄則會占據(jù)太多的資源。通過網(wǎng)絡(luò)推送日志:在系統(tǒng)進(jìn)行大量日志輸出時(shí),會造成網(wǎng)絡(luò)擁堵。影響正常網(wǎng)絡(luò)通訊,甚至日志信息會由于網(wǎng)絡(luò)忙而丟失。加裝固態(tài)硬盤方法:此方法需要依靠硬件支撐,費(fèi)用貴,且容量小,對于需要記錄大量日志的場景下,會因?yàn)槿萘啃《?yīng)用價(jià)值。因此,如何在不改變現(xiàn)有硬件的條件下,以極高性能向外輸出大量日志而又不影響程序的性能,是本領(lǐng)域技術(shù)人員需要解決的技術(shù)問題。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的是提供一種日志生成方法及系統(tǒng),在寫日志時(shí)將程序中的字符常量提前提取,在后續(xù)能夠減少對字符數(shù)據(jù)的操作,可以提升性能并減少了日志文件大小。為解決上述技術(shù)問題,本發(fā)明提供一種日志生成方法,包括:利用日志預(yù)處理工具對預(yù)定源碼文件進(jìn)行掃描,檢測是否存在WriteLog關(guān)鍵字;當(dāng)檢測到WriteLog關(guān)鍵字時(shí),提取對應(yīng)的日志描述信息參數(shù)中的字符并存儲到日志字符數(shù)據(jù)映射文件中,同時(shí)生成一個(gè)唯一的ID值并將所述ID值替代到所述日志描述信息參數(shù)中的字符,形成新的源碼文件;將所述新的源碼文件進(jìn)行編譯生成目標(biāo)代碼進(jìn)行發(fā)布運(yùn)行,生成二進(jìn)制日志文件??蛇x的,所述生成二進(jìn)制日志文件,包括:根據(jù)所述新的源碼文件中WriteLog傳入的參數(shù)順序進(jìn)行二進(jìn)制流化處理,生成二進(jìn)制數(shù)據(jù)流;根據(jù)所述二進(jìn)制數(shù)據(jù)流生成二進(jìn)制日志文件。可選的,根據(jù)所述二進(jìn)制數(shù)據(jù)流生成二進(jìn)制日志文件,包括:將所述二進(jìn)制數(shù)據(jù)流直接插入到緩存隊(duì)列中;日志寫入線程逐條取出緩存隊(duì)列中的二進(jìn)制數(shù)據(jù)流,并將其寫入到磁盤中生成二進(jìn)制日志文件??蛇x的,所述WriteLog的參數(shù)包括日志級別參數(shù)、日志描述信息參數(shù)和變量數(shù)組參數(shù)。可選的,本方案還包括:對所述預(yù)定源碼文件增加版本標(biāo)識,并對所述預(yù)定源碼文件對應(yīng)的所述日志字符數(shù)據(jù)映射文件增加相同的版本標(biāo)識??蛇x的,本方案還包括:根據(jù)所述二進(jìn)制日志文件和所述日志字符數(shù)據(jù)映射文件,利用日志文件解釋器解析輸出可讀日志文件??蛇x的,根據(jù)所述二進(jìn)制日志文件和所述日志字符數(shù)據(jù)映射文件,利用日志文件解釋器解析輸出可讀日志文件,包括:獲取所述二進(jìn)制日志文件以及對應(yīng)的所述日志字符數(shù)據(jù)映射文件;依次讀取所述二進(jìn)制日志文件中的數(shù)據(jù);解析所述數(shù)據(jù)中各個(gè)參數(shù)值,并根據(jù)所述日志描述信息參數(shù)值從所述日志字符數(shù)據(jù)映射文件中獲取對應(yīng)的字符串;利用Format函數(shù),根據(jù)所述字符串以及各個(gè)所述參數(shù)值,生成目標(biāo)日志字符信息,形成可讀日志文件并輸出。本發(fā)明還提供一種日志生成系統(tǒng),包括:掃描模塊,用于利用日志預(yù)處理工具對預(yù)定源碼文件進(jìn)行掃描,檢測是否存在WriteLog關(guān)鍵字;替換模塊,用于當(dāng)檢測到WriteLog關(guān)鍵字時(shí),提取對應(yīng)的日志描述信息參數(shù)中的字符并存儲到日志字符數(shù)據(jù)映射文件中,同時(shí)生成一個(gè)唯一的ID值并將所述ID值替代到所述日志描述信息參數(shù)中的字符,形成新的源碼文件;編譯模塊,用于將所述新的源碼文件進(jìn)行編譯生成目標(biāo)代碼進(jìn)行發(fā)布運(yùn)行,生成二進(jìn)制日志文件??蛇x的,所述編譯模塊,包括:二進(jìn)制流化處理單元,用于根據(jù)所述新的源碼文件中WriteLog傳入的參數(shù)順序進(jìn)行二進(jìn)制流化處理,生成二進(jìn)制數(shù)據(jù)流;二進(jìn)制日志文件生成單元,用于根據(jù)所述二進(jìn)制數(shù)據(jù)流生成二進(jìn)制日志文件??蛇x的,本方案還包括:解析模塊,用于根據(jù)所述二進(jìn)制日志文件和所述日志字符數(shù)據(jù)映射文件,利用日志文件解釋器解析輸出可讀日志文件。本發(fā)明所提供的一種公開了日志生成方法,包括:利用日志預(yù)處理工具對預(yù)定源碼文件進(jìn)行掃描,檢測是否存在WriteLog關(guān)鍵字;當(dāng)檢測到WriteLog關(guān)鍵字時(shí),提取對應(yīng)的日志描述信息參數(shù)中的字符并存儲到日志字符數(shù)據(jù)映射文件中,同時(shí)生成一個(gè)唯一的ID值并將ID值替代到日志描述信息參數(shù)中的字符,形成新的源碼文件;將新的源碼文件進(jìn)行編譯生成目標(biāo)代碼進(jìn)行發(fā)布運(yùn)行,生成二進(jìn)制日志文件;可見,該方法在寫日志時(shí)將程序中的字符常量提前提取,在后續(xù)能夠減少對字符數(shù)據(jù)的操作,可以提升性能并減少了日志文件大小,且減輕了IO負(fù)擔(dān);本發(fā)明還提供了一種日志生成系統(tǒng),具有上述有益效果,在此不再贅述。附圖說明為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。圖1為本發(fā)明實(shí)施例所提供的日志生成方法的流程圖;圖2為本發(fā)明實(shí)施例所提供的日志生成方法的流程示意圖;圖3為本發(fā)明實(shí)施例所提供的日志生成系統(tǒng)的結(jié)構(gòu)框圖。具體實(shí)施方式本發(fā)明的核心是提供一種日志生成方法及系統(tǒng),在寫日志時(shí)將程序中的字符常量提前提取,在后續(xù)能夠減少對字符數(shù)據(jù)的操作,可以提升性能并減少了日志文件大小。為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。本實(shí)施例提供的方法可以在程序運(yùn)行中以極高性能向外輸出大量日志而又不影響程序的性能。且在相同日志信息量下又可以比傳統(tǒng)日志記錄方法極大的減少日志文件的大小。具體請參考圖1,圖1為本發(fā)明實(shí)施例所提供的日志生成方法的流程圖;該方法可以包括:S100、利用日志預(yù)處理工具對預(yù)定源碼文件進(jìn)行掃描,檢測是否存在WriteLog關(guān)鍵字;S110、當(dāng)檢測到WriteLog關(guān)鍵字時(shí),提取對應(yīng)的日志描述信息參數(shù)中的字符并存儲到日志字符數(shù)據(jù)映射文件中,同時(shí)生成一個(gè)唯一的ID值并將所述ID值替代到所述日志描述信息參數(shù)中的字符,形成新的源碼文件;具體的,這兩個(gè)步驟主要實(shí)現(xiàn)寫日志時(shí),盡量減少對字符數(shù)據(jù)的操作,從而可以提高日志生成性能。即在編碼完成后,將代碼(即預(yù)定源碼文件)中的日志描述信息參數(shù)對應(yīng)的字符都抽取出來存入獨(dú)立的日志字符數(shù)據(jù)映射文件中,同時(shí)對抽取的每一條字符進(jìn)行唯一編碼,并將此碼替換到日志代碼的字符串位置,完成預(yù)定源碼文件中全部WriteLog關(guān)鍵字處的替換后,形成新的源碼文件。其中,WriteLog的參數(shù)包括日志級別參數(shù)、日志描述信息參數(shù)和變量數(shù)組參數(shù)。在對預(yù)定源碼文件進(jìn)行重新編譯前,需要對WriteLog函數(shù)(即WriteLog)進(jìn)行一些規(guī)范和約束。例如:日志輸出函數(shù)約定如:WriteLog(iLeve:integer;constFormat:string;constArgs:arrayofconst)。其中,iLeve參數(shù)表示日志級別,通過它根據(jù)系統(tǒng)參數(shù)的當(dāng)前設(shè)定級別決定此行日志是否需要被記錄。Format參數(shù)是此行日志的描述信息,即一行可被Format的字符串參數(shù)??梢园瑃ype參數(shù),如%d、%f、%s等。Args是一個(gè)變量數(shù)組,即它里面可以有多個(gè)參數(shù),而且每個(gè)參數(shù)可以不同。代碼編寫完成后,需要使用日志預(yù)處理工具對代碼中的WriteLog進(jìn)行預(yù)處理。將sExplain傳入的字符生成日志字符數(shù)據(jù)映射文件。下面通過編程處理舉例具體說明上述過程:程序員在代碼中需要輸出日志處,使用約定的WriteLog函數(shù)及參數(shù)規(guī)范進(jìn)行日志輸出。例如以下代碼片段即預(yù)定源碼文件:當(dāng)程序員把所有的代碼編寫完成后,接下來就是使用日志預(yù)處理工具對代碼中涉及到日志輸出的進(jìn)行預(yù)處理。日志預(yù)處理工具的處理邏輯很簡單,即對所有的源碼文件進(jìn)行掃描(可以是逐條掃描),當(dāng)檢測到WriteLog關(guān)鍵字時(shí),自動將日志描述信息參數(shù)中的字符抽取并追加到日志字符數(shù)據(jù)映射文件中,同時(shí)生成一個(gè)唯一ID值替代到當(dāng)前代碼中日志描述信息參數(shù)中的字符處。例如以上的代碼被處理后會如下即形成了新的源碼文件:WriteLog(1,1,Stream.Size)//日志輸出1ifStream.Size>0thenbeginWriteLog(1,2,SizeOf(ZlibCount))//日志輸出2Stream.Position:=0;Stream.ReadBuffer(ZlibCount,SizeOf(ZlibCount));GetMem(Buffer,ZlibCount);UnZipStream:=TDecompressionStream.Create(Stream);TryUnZipStream.ReadBuffer(Buffer^,ZlibCount);Result.WriteBuffer(Buffer^,ZlibCount);Result.Position:=0;FinallyWriteLog(1,3,UnZipStream.SizeOf)//日志輸出3UnZipStream.Free;FreeMem(Buffer);end;end;通過代碼中加粗字體可以得到日志字符數(shù)據(jù)映射文件中包含:“1=當(dāng)前Stream流的大?。剑”,“2=獲取原始流大?。剑”,“3=處理完畢UnZipStream=%d”。S120、將所述新的源碼文件進(jìn)行編譯生成目標(biāo)代碼進(jìn)行發(fā)布運(yùn)行,生成二進(jìn)制日志文件。具體的,日志輸出時(shí),將程序中的字符常量提前提取,那么在后續(xù)的處理可以提升性能并減少了日志文件大小(因?yàn)樵诔绦虻倪\(yùn)行中,同一行日志會被反復(fù)輸出,但較長的字符已經(jīng)被抽出,所以很大程序上減少了文件大小并提升了性能)。由于目前常用的日志輸出操作都離不開類似Format功能的,需要對字符串進(jìn)行拼接轉(zhuǎn)換成一串字符串后才保存到磁盤文件中。而字符串的操作在計(jì)算中是相當(dāng)耗時(shí)的,它是影響程序性能的主要原因。因此為了規(guī)避日志輸出的字符串操作。將耗時(shí)耗性能的字符串操作交給其它設(shè)備按需的去處理。從而進(jìn)一步提高日志生成的性能。即不對日志信息進(jìn)行直接的拼接,例如:Writelog(“輸出日志%d”,123)傳統(tǒng)做法是在代碼中,將123的值替入到日志數(shù)據(jù)”輸出日志%d”的%d位置。但本實(shí)施例將不再做此操作,而是將日志參數(shù)按順序保存即可。由于程序中寫入到磁盤中的日志數(shù)據(jù)都是直接采用二進(jìn)制流化進(jìn)行存儲,即得到的是二進(jìn)制日志文件。其并沒有像傳統(tǒng)的方法那樣,需要將日志數(shù)據(jù)都轉(zhuǎn)為可以讀懂的字符串進(jìn)行存儲。所以直接打開日志文件,是無法讀懂內(nèi)部記錄的內(nèi)容。所以需要在后期借助此日志分析工具來完成日志分析及問題排查等工作。實(shí)現(xiàn)將耗時(shí)的日志字符拼接與生成排除在當(dāng)前運(yùn)行環(huán)境內(nèi)。而是可以使用其它機(jī)器資源或任意時(shí)間去解析日志文件。對計(jì)算資源占用做到了巧妙的轉(zhuǎn)移。即規(guī)避了日志輸出時(shí)類似Format的耗時(shí)的字符串操作。(本發(fā)明在日志數(shù)據(jù)存儲時(shí),不需要在運(yùn)行時(shí)進(jìn)行耗時(shí)費(fèi)性能的拼接字符串)。因此,優(yōu)選的,所述生成二進(jìn)制日志文件可以包括:根據(jù)所述新的源碼文件中WriteLog傳入的參數(shù)順序進(jìn)行二進(jìn)制流化處理,生成二進(jìn)制數(shù)據(jù)流;根據(jù)所述二進(jìn)制數(shù)據(jù)流生成二進(jìn)制日志文件。具體的,流化處理:根據(jù)傳入的參數(shù)順序?qū)⑺鼈冎苯舆M(jìn)行二進(jìn)制流化處理。例如每個(gè)參數(shù)的存儲格式如下:變量類型(1:整型2:浮點(diǎn)型3:字符型)長度變量值例如:WriteLog(1,2,SizeOf(ZlibCount))假設(shè)SizeOf(ZlibCount)的值為100內(nèi)部將其處理為二進(jìn)制流如表一所示,根據(jù)上述二進(jìn)制流表中二進(jìn)制數(shù)據(jù)可以生成二進(jìn)制日志文件。表1二進(jìn)制流表偏移地址存入的值字節(jié)長度含義說明0000H34字節(jié)WriteLog的參數(shù)個(gè)數(shù)0004H14字節(jié)變量類型0008H44字節(jié)當(dāng)前變量值的長度信息000cH14字節(jié)存入WriteLog中的參數(shù)1的值0010H14字節(jié)變量類型0014H44字節(jié)當(dāng)前變量值的長度信息0018H24字節(jié)存入WriteLog中的參數(shù)2的值001cH14字節(jié)變量類型0020H44字節(jié)當(dāng)前變量值的長度信息0024H1004字節(jié)存入WriteLog中的參數(shù)3的值進(jìn)一步為了提高IO效率,本實(shí)施例在寫日志時(shí),不直接寫入磁盤,由于磁盤IO的速度是比較慢的,所以先寫入到預(yù)分配好的內(nèi)存中,再異步寫入磁盤。具體的,根據(jù)所述二進(jìn)制數(shù)據(jù)流生成二進(jìn)制日志文件可以包括:將所述二進(jìn)制數(shù)據(jù)流直接插入到緩存隊(duì)列中;日志寫入線程逐條取出緩存隊(duì)列中的二進(jìn)制數(shù)據(jù)流,并將其寫入到磁盤中生成二進(jìn)制日志文件。具體的,日志輸出時(shí)只是將原始參數(shù)直接進(jìn)行二進(jìn)制流保存,無需額外的字符拼接等處理,同時(shí)也不需要處理效率低下的Format函數(shù)。所以在二進(jìn)制日志文件記錄時(shí),性能是有極大的提升的。請參考圖2,圖2給出了多個(gè)預(yù)定源碼文件(圖2中指業(yè)務(wù)代碼)生成日志的流程示意圖。各個(gè)業(yè)務(wù)代碼之間可以并行運(yùn)行。都將各自的業(yè)務(wù)代碼進(jìn)行WriteLog關(guān)鍵字掃描,并對生成的目標(biāo)代碼進(jìn)行流化處理,得到二進(jìn)制流,并通過高速緩存隊(duì)列異步讀取二進(jìn)制流數(shù)據(jù)到磁盤中?;谏鲜黾夹g(shù)方案,本發(fā)明實(shí)施例提供的日志生成方法,在寫日志時(shí)將程序中的字符常量提前提取,在后續(xù)能夠減少對字符數(shù)據(jù)的操作,可以提升性能并減少了日志文件大小,且減輕了IO負(fù)擔(dān)。由于在對預(yù)定源碼文件進(jìn)行編譯形成新的源碼文件的過程會形成日志字符數(shù)據(jù)映射文件。根據(jù)上述各實(shí)施例的描述可以看到這個(gè)日志字符數(shù)據(jù)映射文件與預(yù)定源碼文件是一一對應(yīng)的。因此,必須保證這兩個(gè)文件的統(tǒng)一。可以通過生成相同的代號(例如一對文件對應(yīng)的代碼數(shù)字相同),也可以通過增加標(biāo)識來識別相同的文件等。本實(shí)施例并不對此進(jìn)行限定。進(jìn)一步為了提高可靠性,優(yōu)選的,基于上述任意實(shí)施例,該方法還可以包括:對所述預(yù)定源碼文件增加版本標(biāo)識,并對所述預(yù)定源碼文件對應(yīng)的所述日志字符數(shù)據(jù)映射文件增加相同的版本標(biāo)識。具體的,由于生成的“日志字符數(shù)據(jù)映射文件”是需要結(jié)合當(dāng)前目標(biāo)代碼的,因此需要做相應(yīng)的版本功能,不能混淆映射文件。這里可以是直接對預(yù)定源碼文件增加版本標(biāo)識,從而尤其生成的新的源碼文件以及對應(yīng)的編譯后的目標(biāo)代碼都會具有該版本標(biāo)識?;蛘呤侵苯訉δ繕?biāo)代碼增加版本標(biāo)識。由于二進(jìn)制日志文件中保存的并不是最終的日志信息,它類似于是一種原始格式的日志數(shù)據(jù)。因此它不能被直接閱讀。所以需要提供一個(gè)日志文件解釋器。根據(jù)特定算法將二進(jìn)制日志文件結(jié)合日志字符數(shù)據(jù)映射文件,進(jìn)行最終的日志輸出。進(jìn)而得到可讀日志文件。為了提高系統(tǒng)效率,此解析過程是不需要現(xiàn)場去做的。因此它不影響實(shí)際的生產(chǎn)環(huán)境的業(yè)務(wù)運(yùn)行。即基于上述任意實(shí)施例,該方法還可以包括:根據(jù)所述二進(jìn)制日志文件和所述日志字符數(shù)據(jù)映射文件,利用日志文件解釋器解析輸出可讀日志文件。具體的,由于上述各實(shí)施例中對預(yù)定源碼文件進(jìn)行重新編譯后形成新的源碼文件以及日志字符數(shù)據(jù)映射文件,因此最終生成的日志文件具有一定保密性,其必須獲取到日志字符數(shù)據(jù)映射文件才能夠?qū)ΧM(jìn)制日志文件進(jìn)行解析,生成可讀日志文件。即將新的源碼文件進(jìn)行編譯生成最終的目標(biāo)代碼進(jìn)行發(fā)布運(yùn)行,并將生成的日志字符數(shù)據(jù)映射文件提供給日志分析工具使用??蛇x的,根據(jù)所述二進(jìn)制日志文件和所述日志字符數(shù)據(jù)映射文件,利用日志文件解釋器解析輸出可讀日志文件可以包括:獲取所述二進(jìn)制日志文件以及對應(yīng)的所述日志字符數(shù)據(jù)映射文件;依次讀取所述二進(jìn)制日志文件中的數(shù)據(jù);解析所述數(shù)據(jù)中各個(gè)參數(shù)值,并根據(jù)所述日志描述信息參數(shù)值從所述日志字符數(shù)據(jù)映射文件中獲取對應(yīng)的字符串;利用Format函數(shù),根據(jù)所述字符串以及各個(gè)所述參數(shù)值,生成目標(biāo)日志字符信息,形成可讀日志文件并輸出。具體的,從日志文件流中,按條取出參數(shù)。通過參數(shù)(Format)中的ID值,即可從日志字符數(shù)據(jù)映射文件中獲取到程序中原始的日志輸出的提示信息。然后再根據(jù)其它參數(shù),即可以代入到當(dāng)前字符串中的type參數(shù),最終形成一條可以被讀的懂的日志信息。由于本實(shí)施例在編碼階段就已經(jīng)將日志輸出時(shí)的字符串統(tǒng)一抽取出去,自然就減少了耗時(shí)的字符串操作,同時(shí)程序代碼中并不需要調(diào)用耗時(shí)的Format語句對字符串進(jìn)行拼接操作。而且日志的輸出是直接使用二進(jìn)流方式寫入到內(nèi)存緩存中。因此本實(shí)施例中日志的大量輸出性能是極高的,即使在大量日志輸出的情況下也幾乎不會影響業(yè)務(wù)代碼的運(yùn)行,由于日志文件中的大量字符串已經(jīng)不存在了,所以輸出的文件比原來的要小很多,減少了磁盤的IO操作。同時(shí)日志還具備一定的保密性?;谏鲜黾夹g(shù)方案,本發(fā)明實(shí)施例提的日志生成方法,在不改變現(xiàn)有硬件的條件且在高性能大并發(fā)運(yùn)行的程序中需要輸出大量日志信息時(shí),能夠用極少的資源占用來達(dá)到高性能的日志記錄。同時(shí)它所占用的磁盤空間會更小而且對業(yè)務(wù)程序代碼的運(yùn)行性能影響極小。同時(shí),生成的日志信息還具有一定的保密性。下面對本發(fā)明實(shí)施例提供的日志生成系統(tǒng)進(jìn)行介紹,下文描述的日志生成系統(tǒng)與上文描述的日志生成方法可相互對應(yīng)參照。請參考圖3,圖3為本發(fā)明實(shí)施例所提供的日志生成系統(tǒng)的結(jié)構(gòu)框圖;該系統(tǒng)可以包括:掃描模塊100,用于利用日志預(yù)處理工具對預(yù)定源碼文件進(jìn)行掃描,檢測是否存在WriteLog關(guān)鍵字;替換模塊200,用于當(dāng)檢測到WriteLog關(guān)鍵字時(shí),提取對應(yīng)的日志描述信息參數(shù)中的字符并存儲到日志字符數(shù)據(jù)映射文件中,同時(shí)生成一個(gè)唯一的ID值并將所述ID值替代到所述日志描述信息參數(shù)中的字符,形成新的源碼文件;編譯模塊300,用于將所述新的源碼文件進(jìn)行編譯生成目標(biāo)代碼進(jìn)行發(fā)布運(yùn)行,生成二進(jìn)制日志文件??蛇x的,所述編譯模塊300可以包括:二進(jìn)制流化處理單元,用于根據(jù)所述新的源碼文件中WriteLog傳入的參數(shù)順序進(jìn)行二進(jìn)制流化處理,生成二進(jìn)制數(shù)據(jù)流;二進(jìn)制日志文件生成單元,用于根據(jù)所述二進(jìn)制數(shù)據(jù)流生成二進(jìn)制日志文件?;谏鲜鋈我鈱?shí)施例,該系統(tǒng)還可以包括:標(biāo)識模塊,用于對所述預(yù)定源碼文件增加版本標(biāo)識,并對所述預(yù)定源碼文件對應(yīng)的所述日志字符數(shù)據(jù)映射文件增加相同的版本標(biāo)識。基于上述任意實(shí)施例,該系統(tǒng)還可以包括:解析模塊,用于根據(jù)所述二進(jìn)制日志文件和所述日志字符數(shù)據(jù)映射文件,利用日志文件解釋器解析輸出可讀日志文件。說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。專業(yè)人員還可以進(jìn)一步意識到,結(jié)合本文中所公開的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來實(shí)現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對每個(gè)特定的應(yīng)用來使用不同方法來實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。結(jié)合本文中所公開的實(shí)施例描述的方法或算法的步驟可以直接用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來實(shí)施。軟件模塊可以置于隨機(jī)存儲器(RAM)、內(nèi)存、只讀存儲器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤、可移動磁盤、CD-ROM、或
技術(shù)領(lǐng)域
內(nèi)所公知的任意其它形式的存儲介質(zhì)中。以上對本發(fā)明所提供的一種日志生成方法及系統(tǒng)進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對于本
技術(shù)領(lǐng)域
的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
开平市| 通许县| 怀化市| 京山县| 青阳县| 日照市| 霞浦县| 旅游| 平山县| 永川市| 张家川| 涿州市| 盐山县| 卢龙县| 马公市| 乌苏市| 北碚区| 七台河市| 重庆市| 兴城市| 镇安县| 灵寿县| 鄯善县| 北川| 琼结县| 榆社县| 广德县| 大同县| 手机| 阿坝县| 兰西县| 宝丰县| 济源市| 靖江市| 神木县| 金塔县| 晴隆县| 灵川县| 开封市| 丹凤县| 龙胜|