您好,登錄后才能下訂單哦!
通常,日志文件都是文本格式,其中的內容是非結構化的文本串。這就使得我們查詢日志信息時,一般只能使用文本編輯軟件的搜索功能,輸入關鍵字后,靠眼力去偵查每處匹配結果。在日志量不大,或者只是偶爾查一下時,這么操作倒也無妨。不過,再簡單的事情也怕多次重復。如果需要頻繁查詢,量變就可能引起質變。如果每次還都要靠人工搜索,那么就算有再好的視力,也會有頭暈目眩的時候。因此,想要輕松查詢日志,就必須找到一款合適的工具,有了合適的工具,就可以一邊喝著咖啡,一邊輕彈條件回車就行了。
工具里面,首先想到的,就是利用各種計算機開發語言,外加關系數據庫。但這類工具開發過程繁瑣,還需要準備好多工作環境,包括配置語言開發環境,安裝數據庫服務,安裝數據庫查詢應用等。
對于這么“重”的方案,我們果斷撇開。因為今天就要介紹一個輕巧方便的工具——集算器,利用集算器,可以將文本日志變成結構化數據,然后就可以使用我們熟悉的 SQL 式查詢了。
這里,我們利用到了集算語言 (Structured Process Language,簡稱 SPL) 的兩大優點:
將日志內容結構化為數據表結構,SPL 遠比常用開發語言簡單、易用、直觀。
SPL 支持直接對結構化的文件進行 SQL 查詢,不再需要安裝配置第三方數據庫軟件。
下面就是具體的實施過程。
不同的日志文件,其內容格式五花八門,每一個看上去都雜亂無章。但對于某個特定的具體的日志來說,它一定會有它自己的結構。拿到日志文件后,首先要做的就是分析日志內容,提煉數據結構,總結出可以結構化的字段。
作為示例,我們用騰訊視頻軟件下的一個啟動日志來做案例。如果你也用過騰訊視頻,就可以利用下面的代碼來體驗和學習,分析一下自己的使用行為了。這個日志文件,位于當前用戶的 AppData 路徑下,并且以 QQLive.exe[Main] 開頭。在我的機器上,這個文件就是:
C:\Users\[Joancy]\AppData\Roaming\Tencent\QQLive\Log\QQLive.exe[Main][2018-8-3 21-5-35-557][12164].log
上述路徑中 [Joancy] 是我的 Windows 登錄用戶名,在你的機器中,將會是你的用戶名。QQLive.exe[Main]開頭的日志文件有很多,隨便取一個就可以。
下面就是這個日志文件中的兩行:
[18-07-19 14:35:06][9416]-[31ms][QQLiveMainModule.dll][CQQLiveModule::ParsCommandLine] cmd=”C:\Program Files (x86)\Tencent\QQLive\QQLive.exe” -system_startup
[18-07-19 14:35:08][9416]-[2266ms][HttpModule.dll][CDownloadMgr::AddTask]keyid = 1,url = http://182.254.116.117/d?dn=vv.video.qq.com.&ttl=1
可以看到,這個日志的內容比較規整,一行一條記錄。每行中一對中括號中的內容為一節,對應一個字段。只是最后的兩節有點特殊,其中倒數第二節可以省略,而最后一節沒用中括號括起來。這樣,我們就可以整理出日志表的數據結構如下,并且把第一行內容作為對應的示例:
字段名 | 類型 | 分節內容 | |
---|---|---|---|
1 | 記錄時間 | DateTime | [18-07-19 14:35:06] |
2 | 線程編號 | Integer | [9416] |
3 | 加載時刻 | Integer | [31ms] |
4 | 加載模塊 | String | [QQLiveMainModule.dll] |
5 | 加載函數 | String | [CQQLiveModule::ParsCommandLine] |
6 | 日志內容 | String | cmd=”C:\Program Files (x86)\Tencent\QQLive\QQLive.exe” -system_startup |
表(1)
解析各個字段時,需要注意:
1) 記錄時間: 由于年份只有兩位,所以在轉成日期時間類型時,需要指定相匹配的日期格式,否則 18 就會被當成公元 18 年,而不是 2018 年了。具體的操作方法是打開集算器菜單中的選項,在彈出的窗口中點擊環境頁面,設置屬性‘日期時間格式’為‘yy-MM-dd HH
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。