亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種記錄日志數(shù)據(jù)的方法和裝置與流程

文檔序號:11155483閱讀:243來源:國知局
一種記錄日志數(shù)據(jù)的方法和裝置與制造工藝

本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種記錄日志數(shù)據(jù)的方法和裝置。



背景技術(shù):

應(yīng)用程序在運行的過程中可以記錄日志數(shù)據(jù)。一般,基于技術(shù)人員的設(shè)置,應(yīng)用程序在完成某項處理或出現(xiàn)某種錯誤時,可以記錄一條日志數(shù)據(jù)。日志數(shù)據(jù)可以幫助技術(shù)人員對應(yīng)用程序進行運行狀態(tài)分析和故障分析等。

在早期的技術(shù)中,應(yīng)用程序每生成一條日志數(shù)據(jù)時,就會將日志數(shù)據(jù)寫入到日志文件中。將日志數(shù)據(jù)寫入到日志文件的處理需要系統(tǒng)程序來執(zhí)行,首先應(yīng)用程序生成日志數(shù)據(jù)后可以向系統(tǒng)程序發(fā)送寫入申請,然后由系統(tǒng)程序?qū)⑷罩緮?shù)據(jù)寫入日志文件中。上述處理過程中,每記錄一條日志數(shù)據(jù),就需要在應(yīng)用程序處理和系統(tǒng)程序處理之間進行一次往復(fù)切換,而這種切換的時延很高。

為了減少應(yīng)用程序處理和系統(tǒng)程序處理之間的切換,提出了一種新的記錄日志數(shù)據(jù)的處理方式:應(yīng)用程序每生成一條日志數(shù)據(jù)時,先對生成的日志數(shù)據(jù)進行緩存,當緩存的日志數(shù)據(jù)達到一定數(shù)據(jù)量時,對緩存的多條日志數(shù)據(jù)進行整體壓縮,再將壓縮后的日志數(shù)據(jù)寫入日志文件。這樣,將日志數(shù)據(jù)寫入日志文件的頻率降低,從而,應(yīng)用程序處理和系統(tǒng)程序處理之間切換的頻率也有所降低,可以降低處理過程的時延。

在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:

上述處理中,當緩存的日志數(shù)據(jù)達到一定數(shù)據(jù)量時,對緩存的多條日志數(shù)據(jù)進行整體壓縮,這樣,需要壓縮的數(shù)據(jù)量比較大,會突發(fā)性地占用大量的處理資源,從而,會導(dǎo)致應(yīng)用程序運行卡頓。



技術(shù)實現(xiàn)要素:

為了解決現(xiàn)有技術(shù)的問題,本發(fā)明實施例提供了一種記錄日志數(shù)據(jù)的方法和裝置。所述技術(shù)方案如下:

第一方面,提供了一種記錄日志數(shù)據(jù)的方法,所述方法包括:

獲取應(yīng)用程序生成的日志數(shù)據(jù);

以單條日志數(shù)據(jù)為基本壓縮元素,對生成的日志數(shù)據(jù)逐條進行流式壓縮,對每條壓縮后的日志數(shù)據(jù)進行緩存;

每當緩存的日志數(shù)據(jù)滿足預(yù)設(shè)導(dǎo)出條件時,將緩存的日志數(shù)據(jù)寫入日志文件中,并清除緩存的日志數(shù)據(jù)。

第二方面,提供了記錄日志數(shù)據(jù)的裝置,所述裝置包括:

獲取模塊,用于獲取應(yīng)用程序生成的日志數(shù)據(jù);

緩存模塊,用于以單條日志數(shù)據(jù)為基本壓縮元素,對生成的日志數(shù)據(jù)逐條進行流式壓縮,對每條壓縮后的日志數(shù)據(jù)進行緩存;

寫入模塊,用于每當緩存的日志數(shù)據(jù)滿足預(yù)設(shè)導(dǎo)出條件時,將緩存的日志數(shù)據(jù)寫入日志文件中,并清除緩存的日志數(shù)據(jù)。

本發(fā)明實施例提供的技術(shù)方案帶來的有益效果是:

本發(fā)明實施例中,采用流式壓縮的方式,每生成一條日志數(shù)據(jù)即可以壓縮一條日志數(shù)據(jù),每次壓縮的數(shù)據(jù)量比較小,不會突發(fā)性的占用大量的處理資源,從而,可以減少應(yīng)用程序的卡頓。

附圖說明

為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1是本發(fā)明實施例提供的一種記錄日志數(shù)據(jù)的方法的流程示意圖;

圖2是本發(fā)明實施例提供的一種日志結(jié)構(gòu)體的示意圖;

圖3是本發(fā)明實施例提供的一種存在數(shù)據(jù)損壞的日志文件的示意圖;

圖4是本發(fā)明實施例提供的一種記錄日志數(shù)據(jù)的方法的流程示意圖;

圖5是本發(fā)明實施例提供的一種記錄日志數(shù)據(jù)的方法的流程示意圖;

圖6是本發(fā)明實施例提供的一種記錄日志數(shù)據(jù)的裝置的結(jié)構(gòu)示意圖;

圖7是本發(fā)明實施例提供的一種終端的結(jié)構(gòu)示意圖。

具體實施方式

為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進一步地詳細描述。

本發(fā)明實施例提供了一種記錄日志數(shù)據(jù)的方法,該方法可以由終端實現(xiàn)。其中,終端可以是手機、平板電腦、臺式計算機、筆記本計算機等,終端中安裝有系統(tǒng)程序和應(yīng)用程序。用戶在使用終端的過程中,基于自己的不同需求,會使用各種各樣的應(yīng)用程序。該方法可以應(yīng)用于應(yīng)用程序的運行過程中。應(yīng)用程序會基于其進行的處理或出現(xiàn)的錯誤生成日志數(shù)據(jù),進而可以采用本發(fā)明實施例提供的方法,進行日志數(shù)據(jù)的記錄,最終得到日志文件。該日志文件可以由終端上傳給服務(wù)器,以提供給相應(yīng)的技術(shù)人員,技術(shù)人員可以基于日志文件對應(yīng)用程序進行運行狀態(tài)分析和故障分析等。

終端可以包括處理器、存儲器等部件。處理器,可以為CPU(Central Processing Unit,中央處理單元)等,可以用于獲取應(yīng)用程序生成的日志數(shù)據(jù),對生成的日志數(shù)據(jù)進行流式壓縮,將緩存的日志數(shù)據(jù)寫入日志文件中,等處理。存儲器,可以為RAM(Random Access Memory,隨機存取存儲器),F(xiàn)lash(閃存)等,可以用于存儲接收到的數(shù)據(jù)、處理過程所需的數(shù)據(jù)、處理過程中生成的數(shù)據(jù)等,如日志數(shù)據(jù)、預(yù)設(shè)導(dǎo)出條件等。

終端還可以包括收發(fā)器、輸入部件、顯示部件、音頻輸出部件等。收發(fā)器,可以用于與服務(wù)器進行數(shù)據(jù)傳輸,例如,可以向服務(wù)器發(fā)送日志文件,收發(fā)器可以包括天線、匹配電路、調(diào)制解調(diào)器等。輸入部件可以是觸摸屏、鍵盤、鼠標等。音頻輸出部件可以是音箱、耳機等。

如圖1所示,本發(fā)明一個實施例提供的記錄日志數(shù)據(jù)的方法的處理流程可以包括如下的步驟:

步驟101,獲取應(yīng)用程序生成的日志數(shù)據(jù)。

在實施中,技術(shù)人員可以預(yù)先在應(yīng)用程序中設(shè)置日志記錄的觸發(fā)事件,觸發(fā)事件可以是執(zhí)行某項處理或出現(xiàn)某種錯誤,例如,可以設(shè)置應(yīng)用程序顯示A頁面時生成一條日志數(shù)據(jù),或者,可以設(shè)置應(yīng)用程序出現(xiàn)網(wǎng)絡(luò)連接失敗時生成一條日志數(shù)據(jù)。

在應(yīng)用程序運行的過程中,當某個觸發(fā)事件發(fā)生時,應(yīng)用程序會調(diào)用日志接口并輸入需要記錄的數(shù)據(jù)。進而應(yīng)用程序中負責日志記錄的模塊,對輸入的數(shù)據(jù)進行日志格式化,為該數(shù)據(jù)添加文件名、函數(shù)名、時間戳、日志級別、線程號等信息,即可生成日志數(shù)據(jù)。其中,文件名是調(diào)用日志接口的代碼所在文件的文件名,函數(shù)名是調(diào)用日志接口的函數(shù)的函數(shù)名,線程號是調(diào)用日志接口的線程的線程號。應(yīng)用程序每生成一條日志數(shù)據(jù),則可以獲取該條日志數(shù)據(jù),進行后續(xù)的處理。

步驟102,以單條日志數(shù)據(jù)為基本壓縮元素,對生成的日志數(shù)據(jù)逐條進行流式壓縮,對每條壓縮后的日志數(shù)據(jù)進行緩存。

其中,流式壓縮是一種參考歷史數(shù)據(jù)對新生成的數(shù)據(jù)進行壓縮的壓縮方式,可以應(yīng)用于對實時生成或?qū)崟r接收的數(shù)據(jù)進行壓縮。基本壓縮元素是流式壓縮過程中進行數(shù)據(jù)壓縮的基本單位,流式壓縮每次壓縮一個基本壓縮元素。在流式壓縮的過程中,每次壓縮一個基本壓縮元素時,以之前壓縮的基本壓縮元素作為參考數(shù)據(jù),來進行壓縮?;緣嚎s元素的可以基于流式壓縮的實際需求進行設(shè)置,本實施例中,以單條日志數(shù)據(jù)為基本壓縮元素。

在實施中,每當應(yīng)用程序生成一條日志數(shù)據(jù)時,應(yīng)用程序可以以當前時刻之前生成的日志數(shù)據(jù)為參考數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮。在獲取參考數(shù)據(jù)時,可以從當前時刻開始獲取之前生成的部分或全部日志數(shù)據(jù)。例如,可以從當前時刻開始,向前逐條獲取日志數(shù)據(jù),直到獲取的日志數(shù)據(jù)的總數(shù)據(jù)量大于或等于預(yù)設(shè)數(shù)據(jù)量(如32K)時,停止獲取日志數(shù)據(jù),并將以獲取的日志數(shù)據(jù)作為參考數(shù)據(jù)。其中,預(yù)設(shè)數(shù)據(jù)量的設(shè)置,可以基于壓縮率和壓縮處理量綜合考慮,取值可以在16~64K?;趨⒖紨?shù)據(jù)對日志數(shù)據(jù)進行壓縮時,可以確定日志數(shù)據(jù)相對于參考數(shù)據(jù)的差別,將此差別記錄下來作為壓縮數(shù)據(jù)。每壓縮一條日志數(shù)據(jù),則可以將壓縮后的日志數(shù)據(jù)以日志結(jié)構(gòu)體的形式存儲到應(yīng)用緩存中。應(yīng)用緩存即上述應(yīng)用程序向系統(tǒng)程序申請的緩存,用于緩存應(yīng)用程序的數(shù)據(jù)。

可選的,在進行流式壓縮的過程中,每壓縮一條日志數(shù)據(jù)時,可以只參考當前應(yīng)用緩存中存在的日志數(shù)據(jù),相應(yīng)的,處理可以如下:每當生成一條日志數(shù)據(jù)時,如果當前緩存有日志數(shù)據(jù),則以當前緩存的日志數(shù)據(jù)為參考數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮,如果當前未緩存有日志數(shù)據(jù),則不參考其它日志數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮。

在實施中,每當應(yīng)用程序生成一條日志數(shù)據(jù)時,應(yīng)用程序可以檢測應(yīng)用緩存中是否緩存有日志數(shù)據(jù)。因為,應(yīng)用程序每次將緩存的日志數(shù)據(jù)寫入日志文件的時候,會將應(yīng)用緩存中的日志數(shù)據(jù)清除掉,所以,在有些時候應(yīng)用緩存中是沒有日志數(shù)據(jù)的。如果應(yīng)用程序這時檢測到應(yīng)用緩存中存有日志數(shù)據(jù),則可以將這些日志數(shù)據(jù)作為參考數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮,在應(yīng)用緩存中的日志數(shù)據(jù)的數(shù)據(jù)量較大時,可以只將其中的部分日志數(shù)據(jù)作為參考數(shù)據(jù)。如果檢測到應(yīng)用緩存中不存在日志數(shù)據(jù),則可以將當前生成的日志數(shù)據(jù)作為流式壓縮的起始基本壓縮單元,進行壓縮,即不參考其它日志數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮。這樣,每次清除應(yīng)用緩存中的日志數(shù)據(jù)后生成第一條日志數(shù)據(jù)時,則可以認為是流式壓縮的一個起始點,該日志數(shù)據(jù)則可以認為是流式壓縮的一個起始基本壓縮單元。相應(yīng)的,每次清除應(yīng)用緩存中的日志數(shù)據(jù)時,則可以認為是流式壓縮的一個結(jié)束點,此時緩存的最后一條日志數(shù)據(jù)則可以認為是流式壓縮的一個結(jié)束基本壓縮單元。每次將緩存的日志數(shù)據(jù)寫入日志文件時,從緩存中寫入日志文件中的多條日志數(shù)據(jù)可稱為一個壓縮單位。

由于各種不同的原因,可能會造成日志文件中的某部分日志數(shù)據(jù)發(fā)生損壞。例如,在日志數(shù)據(jù)寫入緩存時,應(yīng)用程序異常關(guān)閉或終端死機,則可能造成日志數(shù)據(jù)損壞,在日志數(shù)據(jù)寫入日志文件后,日志文件中的該日志數(shù)據(jù)也是損壞的,或者,在日志數(shù)據(jù)寫入日志文件時,終端死機,則可能造成日志文件中的該日志數(shù)據(jù)損壞。如圖3所示,基于上述的流式壓縮的處理方式,如果日志文件中的某條日志數(shù)據(jù)損壞,則只會影響到該日志數(shù)據(jù)所在的壓縮單位中在該條日志數(shù)據(jù)之后的日志數(shù)據(jù)的解壓縮,而不會影響到其它日志數(shù)據(jù)的解壓縮。而現(xiàn)有技術(shù)中采用塊式壓縮,日志文件中某條日志數(shù)據(jù)損壞,會影響到該日志數(shù)據(jù)所在的壓縮單位中的所有日志數(shù)據(jù)的解壓縮。所以,本發(fā)明實施例的方法,可以減少日志數(shù)據(jù)損壞所造成的數(shù)據(jù)丟失。

可選的,在緩存日志數(shù)據(jù)時,可以對日志數(shù)據(jù)進行加密,相應(yīng)的處理可以是:對每條壓縮后的日志數(shù)據(jù)進行加密,對壓縮加密后的日志數(shù)據(jù)進行緩存。

在實施中,應(yīng)用程序每壓縮一條日志數(shù)據(jù),則可以基于預(yù)設(shè)的密鑰(key)對壓縮后的日志數(shù)據(jù)進行加密,在將壓縮加密后的日志數(shù)據(jù)以日志結(jié)構(gòu)體的形式存儲到應(yīng)用緩存中。其中,日志結(jié)構(gòu)體的結(jié)構(gòu)可以如圖2所示,其中,magic start num字段為日志結(jié)構(gòu)體的開始標識;seq字段為日志數(shù)據(jù)的序列號,在程序生命周期內(nèi)是自增的;length字段為日志結(jié)構(gòu)體中的log字段的長度;crypt key字段為加密所用的密鑰;log字段為壓縮加密后的日志數(shù)據(jù);magic end num字段為日志結(jié)構(gòu)體的結(jié)束標識;省略號代表可以基于實際需求添加其它字段。本實施例中,可以將每條壓縮加密后的日志數(shù)據(jù)分別封裝在一個日志結(jié)構(gòu)體中,進行緩存,也可以將應(yīng)用緩存中緩存的所有日志數(shù)據(jù)封裝在一個日志結(jié)構(gòu)體中,即每得到一條加密壓縮后的日志數(shù)據(jù),則將其添加到應(yīng)用緩存中的日志結(jié)構(gòu)體中的log字段,并基于log字段的更新,對length字段進行更新。

可選的,應(yīng)用程序向系統(tǒng)程序申請應(yīng)用緩存的方式可以多種多樣,本實施例中,以通過mmap(一種具有緩存調(diào)用功能的函數(shù)的名稱)函數(shù)申請緩存和通過shm(一種具有緩存調(diào)用功能的函數(shù)的名稱)函數(shù)申請緩存為例,進行方案的詳細說明。通過不同的方式申請的應(yīng)用緩存,會具有不同的工作機制,下面將結(jié)合應(yīng)用程序異常退出后對緩存日志數(shù)據(jù)進行恢復(fù)的處理過程,對緩存的不同工作機制進行介紹:

方式一,緩存日志數(shù)據(jù)的處理可以是:將每條壓縮后的日志數(shù)據(jù),寫入應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的緩存中。相應(yīng)的,該應(yīng)用程序異常關(guān)閉時的處理可以是:每當應(yīng)用程序異常關(guān)閉時,將該緩存中的日志數(shù)據(jù)寫入預(yù)先建立的該緩存對應(yīng)的映射文件中。相應(yīng)的,對日志數(shù)據(jù)進行恢復(fù)的處理可以是:每當該應(yīng)用程序啟動時,如果該緩存對應(yīng)的映射文件不為空,則將映射文件中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空該映射文件。

下面以應(yīng)用程序通過mmap函數(shù)申請緩存為例。相應(yīng)的,緩存日志數(shù)據(jù)的處理可以是:將每條壓縮后的日志數(shù)據(jù),寫入應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的mmap緩存中。為了在應(yīng)用程序異常退出后可以對緩存日志數(shù)據(jù)進行恢復(fù),可以在每次應(yīng)用程序啟動時,進行如下處理:每當應(yīng)用程序啟動時,如果mmap緩存對應(yīng)的mmap文件不為空,則將mmap文件中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空mmap文件。

在實施中,應(yīng)用程序啟動后可以通過mmap函數(shù)向系統(tǒng)程序申請用于日志數(shù)據(jù)存儲的緩存,此通過mmap函數(shù)申請的緩存可稱作mmap緩存。應(yīng)用程序會在指定的路徑,對應(yīng)此用于日志數(shù)據(jù)存儲的mmap緩存,建立一個mmap文件,并在申請mmap緩存時將該路徑通知系統(tǒng)程序。一般在應(yīng)用程序正常運行的狀態(tài)下,mmap文件為空。當系統(tǒng)程序檢測到應(yīng)用程序異常關(guān)閉時,系統(tǒng)程序會將mmap緩存中的數(shù)據(jù)寫入對應(yīng)的mmap文件中??梢詾閼?yīng)用程序設(shè)置一個啟動處理機制,每當應(yīng)用程序啟動時,檢測上述指定的路徑存儲的mmap文件。如果檢測到該mmap文件,則進一步檢測該mmap文件是否為空,如果不為空,則說明上一次應(yīng)用程序關(guān)閉屬于異常關(guān)閉,且系統(tǒng)程序?qū)惓jP(guān)閉后mmap緩存中殘存的日志文件寫入到該mmap文件中,此時,可以將mmap文件中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空mmap文件,通過此標記,技術(shù)人員在瀏覽日志文件時可以獲知應(yīng)用程序出現(xiàn)異常關(guān)閉,這里進行標記的方式可以是在日志結(jié)構(gòu)體的前后增加特定的標識字段。如果在指定的路徑?jīng)]有查找到該mmap文件,說明該應(yīng)用程序是安裝后第一次運行,此時,可以通過mmap函數(shù)向系統(tǒng)程序申請用于日志數(shù)據(jù)存儲的mmap緩存,并建立對應(yīng)的mmap文件。如果在指定的路徑能查找到mmap文件,但mmap文件為空,則說明應(yīng)用程序上一次關(guān)閉是正常關(guān)閉,可以不做任何處理。

方式二,緩存日志數(shù)據(jù)的處理可以是:將每條壓縮后的日志數(shù)據(jù),寫入應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的緩存中。相應(yīng)的,該應(yīng)用程序異常關(guān)閉和正常關(guān)閉時的處理分別可以是:每當該應(yīng)用程序正常關(guān)閉時,清空該緩存中的日志數(shù)據(jù),每當該應(yīng)用程序異常關(guān)閉時,保留該緩存中的日志數(shù)據(jù)。相應(yīng)的,對日志數(shù)據(jù)進行恢復(fù)的處理可以是:每當該應(yīng)用程序啟動時,如果該緩存不為空,則將該緩存中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空該緩存。

下面以應(yīng)用程序通過shm函數(shù)申請緩存為例。相應(yīng)的,緩存日志數(shù)據(jù)的處理可以是:將每條壓縮后的日志數(shù)據(jù),寫入應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的shm緩存中。為了在應(yīng)用程序異常退出后可以對緩存日志數(shù)據(jù)進行恢復(fù),可以在每次應(yīng)用程序啟動時,進行如下處理:每當應(yīng)用程序啟動時,如果shm緩存不為空,則將shm緩存中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空shm緩存。

在實施中,應(yīng)用程序啟動后可以通過shm函數(shù)向系統(tǒng)程序申請用于日志數(shù)據(jù)存儲的緩存,此通過shm函數(shù)申請的緩存可稱作shm緩存。系統(tǒng)程序會將應(yīng)用程序指定的緩存標識與該shm緩存的位置對應(yīng)存儲。應(yīng)用程序正常關(guān)閉時,系統(tǒng)程序會清空shm緩存中的數(shù)據(jù),應(yīng)用程序非正常關(guān)閉時,shm緩存中的數(shù)據(jù)會保留。可以為應(yīng)用程序設(shè)置一個啟動處理機制,每當應(yīng)用程序啟動時,向系統(tǒng)程序查詢上述指定的緩存標識對應(yīng)的shm緩存是否為空。如果系統(tǒng)程序返回的結(jié)果不為空,則說明上一次應(yīng)用程序關(guān)閉屬于異常關(guān)閉,此時可以將shm緩存中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空shm緩存,通過此標記,技術(shù)人員在瀏覽日志文件時可以獲知應(yīng)用程序出現(xiàn)異常關(guān)閉,這里進行標記的方式可以是在日志結(jié)構(gòu)體的前后增加特定的標識字段。如果系統(tǒng)程序返回的結(jié)果為空,則說明應(yīng)用程序上一次關(guān)閉是正常關(guān)閉,或者應(yīng)用程序是安裝后第一次運行,可以不做任何處理。

步驟103,每當緩存的日志數(shù)據(jù)滿足預(yù)設(shè)導(dǎo)出條件時,將緩存的日志數(shù)據(jù)寫入日志文件中,并清除緩存的日志數(shù)據(jù)。

在實施中,隨著應(yīng)用程序的不斷運行,應(yīng)用緩存中的日志數(shù)據(jù)的數(shù)據(jù)量會不斷的增加。應(yīng)用程序可以對應(yīng)用緩存中的日志數(shù)據(jù)的數(shù)據(jù)量進行實時檢測,這里檢測的數(shù)據(jù)量可以是日志數(shù)據(jù)被封裝成日志結(jié)構(gòu)體后的數(shù)據(jù)量,或者可以認為是檢測該應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的mmap緩存或shm緩存中當前存儲數(shù)據(jù)的數(shù)據(jù)量。導(dǎo)出條件可以根據(jù)實際需求任意設(shè)置。每當檢測到緩存日志數(shù)據(jù)的數(shù)據(jù)量滿足預(yù)設(shè)導(dǎo)出條件時,應(yīng)用程序則可以向系統(tǒng)程序發(fā)送寫入請求。進而,系統(tǒng)程序可以將應(yīng)用緩存中的日志數(shù)據(jù)調(diào)入系統(tǒng)緩存,再將日志數(shù)據(jù)由系統(tǒng)緩存寫入指定的日志文件。此時,應(yīng)用程序可以對應(yīng)用緩存中的日志數(shù)據(jù)進行清除,清除之后,應(yīng)用緩存中的日志數(shù)據(jù)的數(shù)據(jù)量歸零。

終端在某些情況下可以將日志文件上傳給服務(wù)器,例如,用戶在應(yīng)用程序故障需要技術(shù)人員協(xié)助解決時,操作應(yīng)用程序?qū)⑷罩疚募蟼鹘o服務(wù)器。技術(shù)人員可以操作管理終端在服務(wù)器中獲取用戶上傳的日志文件,對日志文件中壓縮的日志數(shù)據(jù)進行解壓縮,并按時間順序顯示每條日志數(shù)據(jù)。技術(shù)人員可以瀏覽日志數(shù)據(jù),并對應(yīng)用程序進行運行狀態(tài)分析和故障分析等。

可選的,預(yù)設(shè)導(dǎo)出條件可以設(shè)置如下:每當緩存的日志數(shù)據(jù)的數(shù)據(jù)量達到預(yù)設(shè)閾值或在預(yù)設(shè)時長內(nèi)未發(fā)生變化時,將緩存的日志數(shù)據(jù)寫入日志文件中,并清除緩存的日志數(shù)據(jù)。

其中,預(yù)設(shè)閾值的設(shè)置,可以基于處理資源突發(fā)性占用和處理時延進行綜合考慮。預(yù)設(shè)閾值不宜設(shè)置的過高,這樣可以防止一次性寫入日志文件的數(shù)據(jù)量過大,從而可以降低處理資源的突發(fā)性占用。而且,預(yù)設(shè)閾值不宜設(shè)置過低,這樣可以防止應(yīng)用程序處理和系統(tǒng)程序處理之間切換的頻率過高,長期來看可以減小整體的處理時延。該預(yù)設(shè)閾值的設(shè)置,還可以結(jié)合終端存儲資源的情況進行考慮。該預(yù)設(shè)閾值的取值范圍可以是20~80K。

預(yù)設(shè)時長的設(shè)置,可以基于日志數(shù)據(jù)記錄的及時性和處理時延進行綜合考慮。預(yù)設(shè)時長不宜設(shè)置的過長,這樣可以提高日志數(shù)據(jù)記錄的及時性。而且,預(yù)設(shè)時長不宜設(shè)置過短,這樣可以防止應(yīng)用程序處理和系統(tǒng)程序處理之間切換的頻率過高,長期來看可以減小整體的處理時延。該預(yù)設(shè)時長的取值范圍可以是5~20分鐘。

在實施中,應(yīng)用程序每緩存一條日志數(shù)據(jù),則可以計算當前緩存的日志數(shù)據(jù)的數(shù)據(jù)量。如果該數(shù)據(jù)量大于或者等于預(yù)設(shè)閾值(如50K),則觸發(fā)將緩存的日志數(shù)據(jù)寫入日志文件中,并清除緩存的日志數(shù)據(jù)。同時,在每次緩存的日志數(shù)據(jù)的數(shù)據(jù)量發(fā)生變化后,應(yīng)用程序可以進行計時,如果計時達到預(yù)設(shè)時長(如15分鐘)時該數(shù)據(jù)量還沒有發(fā)生新的變化,則觸發(fā)將緩存的日志數(shù)據(jù)寫入日志文件中,并清除緩存的日志數(shù)據(jù)。

如圖4所示,本發(fā)明又一實施例提供的記錄日志數(shù)據(jù)的方法的處理流程可以包括如下的步驟:

步驟401,每當應(yīng)用程序生成日志數(shù)據(jù)時,終端獲取當前生成的日志數(shù)據(jù)。

步驟402,終端對日志數(shù)據(jù)進行日志格式化。

步驟403,終端以mmap緩存中的日志數(shù)據(jù)為參考數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮。

這里采用的壓縮方式為流式壓縮,流式壓縮的基本壓縮元素為單條日志數(shù)據(jù)。此mmap緩存是應(yīng)用程序向系統(tǒng)程序申請的用于日志數(shù)據(jù)存儲的mmap緩存。

步驟404,終端對壓縮后的日志數(shù)據(jù)進行加密。

步驟405,終端將加密壓縮后的日志數(shù)據(jù)以日志結(jié)構(gòu)體的形式寫入mmap緩存中。

步驟406,每當mmap緩存中日志數(shù)據(jù)的數(shù)據(jù)量達到預(yù)設(shè)閾值或在預(yù)設(shè)時長內(nèi)未發(fā)生變化時,將mmap緩存中的日志數(shù)據(jù)寫入日志文件中,并清除mmap緩存中的日志數(shù)據(jù)。

具體的處理細節(jié)可以參考上面的實施例。

如圖5所示,本發(fā)明又一實施例提供的應(yīng)用程序啟動過程中進行日志數(shù)據(jù)找回的處理流程可以包括如下的步驟:

步驟501,每當應(yīng)用程序啟動時,終端檢測預(yù)設(shè)路徑處是否存儲有mmap文件,如果是,則執(zhí)行步驟502,否則執(zhí)行步驟504。其中,該mmap文件是應(yīng)用程序向系統(tǒng)程序申請的用于日志數(shù)據(jù)存儲的mmap緩存對應(yīng)的mmap文件。

步驟502,檢測在該mmap文件中是否存有數(shù)據(jù),如果是,則執(zhí)行步驟503,否則結(jié)束日志數(shù)據(jù)找回處理。

步驟503,將該mmap文件中的數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空該mmap文件中的數(shù)據(jù)。該步驟執(zhí)行完畢后結(jié)束日志數(shù)據(jù)找回處理。

步驟504,在預(yù)設(shè)路徑處,新建mmap文件。該步驟執(zhí)行完畢后結(jié)束日志數(shù)據(jù)找回處理。

具體的處理細節(jié)可以參考上面的實施例。

本發(fā)明實施例中,采用流式壓縮的方式,每生成一條日志數(shù)據(jù)即可以壓縮一條日志數(shù)據(jù),每次壓縮的數(shù)據(jù)量比較小,不會突發(fā)性的占用大量的處理資源,從而,可以減少應(yīng)用程序的卡頓。另外,每條日志數(shù)據(jù)進行流式壓縮所產(chǎn)生的時延,遠小于應(yīng)用程序處理和系統(tǒng)程序處理之間的切換所產(chǎn)生的時延。

基于相同的技術(shù)構(gòu)思,本發(fā)明實施例還提供了一種記錄日志數(shù)據(jù)的裝置,該裝置可以是上述實施例中的終端,可以用于執(zhí)行上述實施例中的方法,如圖6所示,該裝置包括:

獲取模塊610,用于獲取應(yīng)用程序生成的日志數(shù)據(jù);

緩存模塊620,用于以單條日志數(shù)據(jù)為基本壓縮元素,對生成的日志數(shù)據(jù)逐條進行流式壓縮,對每條壓縮后的日志數(shù)據(jù)進行緩存;

寫入模塊630,用于每當緩存的日志數(shù)據(jù)滿足預(yù)設(shè)導(dǎo)出條件時,將緩存的日志數(shù)據(jù)寫入日志文件中,并清除緩存的日志數(shù)據(jù)。

可選的,所述緩存模塊620,用于:

每當生成一條日志數(shù)據(jù)時,如果當前緩存有日志數(shù)據(jù),則以當前緩存的日志數(shù)據(jù)為參考數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮,如果當前未緩存有日志數(shù)據(jù),則不參考其它日志數(shù)據(jù),對當前生成的日志數(shù)據(jù)進行壓縮。

可選的,所述緩存模塊620,用于:

將每條壓縮后的日志數(shù)據(jù),寫入所述應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的mmap緩存中。

可選的,所述寫入模塊630,還用于:

每當所述應(yīng)用程序啟動時,如果所述mmap緩存對應(yīng)的mmap文件不為空,則將所述mmap文件中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空所述mmap文件。

可選的,所述緩存模塊620,用于:將每條壓縮后的日志數(shù)據(jù),寫入所述應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的緩存中;

所述緩存模塊620,還用于:每當所述應(yīng)用程序異常關(guān)閉時,將所述緩存中的日志數(shù)據(jù)寫入預(yù)先建立的所述緩存對應(yīng)的映射文件中;

所述寫入模塊630,還用于:每當所述應(yīng)用程序啟動時,如果所述緩存對應(yīng)的映射文件不為空,則將所述映射文件中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空所述映射文件。

可選的,所述緩存模塊620,用于:

將每條壓縮后的日志數(shù)據(jù),寫入所述應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的shm緩存中。

可選的,所述寫入模塊630,還用于:

每當所述應(yīng)用程序啟動時,如果所述shm緩存不為空,則將所述shm緩存中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空所述shm緩存。

可選的,所述緩存模塊620,用于:將每條壓縮后的日志數(shù)據(jù),寫入所述應(yīng)用程序調(diào)用的用于日志數(shù)據(jù)存儲的緩存中;

所述緩存模塊620,還用于:每當所述應(yīng)用程序正常關(guān)閉時,清空所述緩存中的日志數(shù)據(jù),每當所述應(yīng)用程序異常關(guān)閉時,保留所述緩存中的日志數(shù)據(jù);

所述寫入模塊630,還用于:每當所述應(yīng)用程序啟動時,如果所述緩存不為空,則將所述緩存中的日志數(shù)據(jù),標記為因應(yīng)用程序異常關(guān)閉而丟失的日志數(shù)據(jù),寫入日志文件中,并清空所述緩存。

可選的,所述緩存模塊620,用于:

對每條壓縮后的日志數(shù)據(jù)進行加密,對壓縮加密后的日志數(shù)據(jù)進行緩存。

可選的,所述寫入模塊630,用于:

每當緩存的日志數(shù)據(jù)的數(shù)據(jù)量達到預(yù)設(shè)閾值或在預(yù)設(shè)時長內(nèi)未發(fā)生變化時,將緩存的日志數(shù)據(jù)寫入日志文件中。

關(guān)于上述實施例中的裝置,其中各個模塊執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實施例中進行了詳細描述,此處將不做詳細闡述說明。

本發(fā)明實施例中,采用流式壓縮的方式,每生成一條日志數(shù)據(jù)即可以壓縮一條日志數(shù)據(jù),每次壓縮的數(shù)據(jù)量比較小,不會突發(fā)性的占用大量的處理資源,從而,可以減少應(yīng)用程序的卡頓。

需要說明的是:上述實施例提供的記錄日志數(shù)據(jù)的裝置在記錄日志數(shù)據(jù)時,僅以上述各功能模塊的劃分進行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的記錄日志數(shù)據(jù)的裝置與記錄日志數(shù)據(jù)的方法實施例屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,這里不再贅述。

請參考圖7,其示出了本發(fā)明實施例所涉及的終端的結(jié)構(gòu)示意圖,該終端可以用于實施上述實施例中提供的記錄日志數(shù)據(jù)的方法。具體來講:

終端700可以包括RF(Radio Frequency,射頻)電路110、包括有一個或一個以上計算機可讀存儲介質(zhì)的存儲器120、輸入單元130、顯示單元140、傳感器150、音頻電路160、WiFi(wireless fidelity,無線保真)模塊170、包括有一個或者一個以上處理核心的處理器180、以及電源190等部件。本領(lǐng)域技術(shù)人員可以理解,圖7中示出的終端結(jié)構(gòu)并不構(gòu)成對終端的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。其中:

RF電路110可用于收發(fā)信息或通話過程中,信號的接收和發(fā)送,特別地,將基站的下行信息接收后,交由一個或者一個以上處理器180處理;另外,將涉及上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路110包括但不限于天線、至少一個放大器、調(diào)諧器、一個或多個振蕩器、用戶身份模塊(SIM)卡、收發(fā)信機、耦合器、LNA(Low Noise Amplifier,低噪聲放大器)、雙工器等。此外,RF電路110還可以通過無線通信與網(wǎng)絡(luò)和其他設(shè)備通信。所述無線通信可以使用任一通信標準或協(xié)議,包括但不限于GSM(Global System of Mobile communication,全球移動通訊系統(tǒng))、GPRS(General Packet Radio Service,通用分組無線服務(wù))、CDMA(Code Division Multiple Access,碼分多址)、WCDMA(Wideband Code Division Multiple Access,寬帶碼分多址)、LTE(Long Term Evolution,長期演進)、電子郵件、SMS(Short Messaging Service,短消息服務(wù))等。

存儲器120可用于存儲軟件程序以及模塊,處理器180通過運行存儲在存儲器120的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理。存儲器120可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)終端700的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲器120可以包括高速隨機存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。相應(yīng)地,存儲器120還可以包括存儲器控制器,以提供處理器180和輸入單元130對存儲器120的訪問。

輸入單元130可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與用戶設(shè)置以及功能控制有關(guān)的鍵盤、鼠標、操作桿、光學(xué)或者軌跡球信號輸入。具體地,輸入單元130可包括觸敏表面131以及其他輸入設(shè)備132。觸敏表面131,也稱為觸摸顯示屏或者觸控板,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸敏表面131上或在觸敏表面131附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動相應(yīng)的連接裝置??蛇x的,觸敏表面131可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標,再送給處理器180,并能接收處理器180發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現(xiàn)觸敏表面131。除了觸敏表面131,輸入單元130還可以包括其他輸入設(shè)備132。具體地,其他輸入設(shè)備132可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標、操作桿等中的一種或多種。

顯示單元140可用于顯示由用戶輸入的信息或提供給用戶的信息以及終端700的各種圖形用戶接口,這些圖形用戶接口可以由圖形、文本、圖標、視頻和其任意組合來構(gòu)成。顯示單元140可包括顯示面板141,可選的,可以采用LCD(Liquid Crystal Display,液晶顯示器)、OLED(Organic Light-Emitting Diode,有機發(fā)光二極管)等形式來配置顯示面板141。進一步的,觸敏表面131可覆蓋顯示面板141,當觸敏表面131檢測到在其上或附近的觸摸操作后,傳送給處理器180以確定觸摸事件的類型,隨后處理器180根據(jù)觸摸事件的類型在顯示面板141上提供相應(yīng)的視覺輸出。雖然在圖7中,觸敏表面131與顯示面板141是作為兩個獨立的部件來實現(xiàn)輸入和輸入功能,但是在某些實施例中,可以將觸敏表面131與顯示面板141集成而實現(xiàn)輸入和輸出功能。

終端700還可包括至少一種傳感器150,比如光傳感器、運動傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板141的亮度,接近傳感器可在終端700移動到耳邊時,關(guān)閉顯示面板141和/或背光。作為運動傳感器的一種,重力加速度傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別手機姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準)、振動識別相關(guān)功能(比如計步器、敲擊)等;至于終端700還可配置的陀螺儀、氣壓計、濕度計、溫度計、紅外線傳感器等其他傳感器,在此不再贅述。

音頻電路160、揚聲器161,傳聲器162可提供用戶與終端700之間的音頻接口。音頻電路160可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P聲器161,由揚聲器161轉(zhuǎn)換為聲音信號輸出;另一方面,傳聲器162將收集的聲音信號轉(zhuǎn)換為電信號,由音頻電路160接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器180處理后,經(jīng)RF電路110以發(fā)送給比如另一終端,或者將音頻數(shù)據(jù)輸出至存儲器120以便進一步處理。音頻電路160還可能包括耳塞插孔,以提供外設(shè)耳機與終端700的通信。

WiFi屬于短距離無線傳輸技術(shù),終端700通過WiFi模塊170可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖7示出了WiFi模塊170,但是可以理解的是,其并不屬于終端700的必須構(gòu)成,完全可以根據(jù)需要在不改變發(fā)明的本質(zhì)的范圍內(nèi)而省略。

處理器180是終端700的控制中心,利用各種接口和線路連接整個手機的各個部分,通過運行或執(zhí)行存儲在存儲器120內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器120內(nèi)的數(shù)據(jù),執(zhí)行終端700的各種功能和處理數(shù)據(jù),從而對手機進行整體監(jiān)控??蛇x的,處理器180可包括一個或多個處理核心;優(yōu)選的,處理器180可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信??梢岳斫獾氖?,上述調(diào)制解調(diào)處理器也可以不集成到處理器180中。

終端700還包括給各個部件供電的電源190(比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器180邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、以及功耗管理等功能。電源190還可以包括一個或一個以上的直流或交流電源、再充電系統(tǒng)、電源故障檢測電路、電源轉(zhuǎn)換器或者逆變器、電源狀態(tài)指示器等任意組件。

盡管未示出,終端700還可以包括攝像頭、藍牙模塊等,在此不再贅述。具體在本實施例中,終端700的顯示單元是觸摸屏顯示器,終端700還包括有存儲器,以及一個或者一個以上的程序,其中一個或者一個以上程序存儲于存儲器中,且經(jīng)配置以由一個或者一個以上處理器執(zhí)行此一個或者一個以上程序來執(zhí)行上述各個實施例所述的記錄日志數(shù)據(jù)的方法。

本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。

以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1