April 21, 2013

使用Legit Log Viewer讀取NLog紀錄檔

Legit Log Viewer是一套可以讀取NLog紀錄檔的免費軟體。在系統開發期間,我們常會把例外訊息或是除錯用的資訊寫入到文字檔中以便檢查問題所在。雖說用一般的文字編輯軟體即可開啟NLog紀錄檔,但紀錄檔內容一多,要從中找出想要的資訊恐怕也得多花些時間。

下載安裝成功後開啟Legit Log Viewer,可以看到一個展示用的log檔Demo Log.tmp.log,位於資料夾C:\Users\Pete\AppData\Local\Temp\底下。從畫面上我們也可以看到所使用的Log Format為NLog (Legit Log custom layout)。


用文字編輯軟體開啟這個log檔可以發現每一列的資料都含有|符號。Legit Log Viewer會把每個以|符號區隔開來的資料當作是一個欄位。以下面的log檔來說,每列以5個|符號區隔資料,所以在Legit Log Viewer上會顯示6個欄位。


Legit Log Viewer在載入log檔時會先檢查目前所有的Log Format中的定義檔(例如NLog (Legit Log custom layout))哪個符合log檔的格式,找到的話便會依照定義檔內所定義的方式顯示log檔。如果要顯示符合自訂格式的log檔,我們需先建立一個Log Format定義檔

點選Tools-> Edit Log Formats,可以看到目前所有的定義檔。


點選NLog (Legit Log custom layout)並按下Save for Edit按鈕,將內建的定義檔重新命名另存新檔。

開啟剛儲存的定義檔可以看到其內容為XML格式。
<?xml version="1.0" encoding="utf-8" ?>
<LogFormat xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.legitlog.com/LogFormatSchema.xsd"
           FormatName="NLog (Legit Log custom layout)">
  <Description>
    Log format for Legit Log NLog layout.
    ${processid}|${longdate}|${level:uppercase=true}|${event-context:item=Context}|${logger}|${message}
  </Description>
  <LogLine>
    <Fields>
      <LogFieldFormat Name="ProcessId" FieldType="Int" Delimiter="|" FilterColumn="true" HighlightRows="true" />
      <LogFieldFormat Name="DateTime" FieldType="DateTime" Delimiter="|" Format="yyyy-MM-dd HH:mm:ss.ffff" />
      <LogFieldFormat Name="Level" FieldType="String" Delimiter="|" FilterColumn="true" HighlightRows="true" />
      <LogFieldFormat Name="Context" FieldType="String" Delimiter="|" FilterColumn="true" />
      <LogFieldFormat Name="Logger" FieldType="String" Delimiter="|" />
      <LogFieldFormat Name="Message" FieldType="String" Delimiter="&#xD;&#xA;" Multiline="true" />
    </Fields>
  </LogLine>
</LogFormat>

設定檔的格式其實蠻直覺的,每個<LogFieldFormat>代表一個欄位,屬性Name為欄位標頭名稱,FieldType為欄位類型,Delimiter為資料分隔符號。<LogFormat>FormatName屬性為定義檔的名稱,你可以修改為較有意義的名稱,例如專案名稱。<Description>內的文字則是用來當我們在Legit Log Viewer中點選此定義檔時要顯示的描述文字,例如顯示此定義檔使用的log檔layout格式(設定在NLog設定檔中<target>裡的layout屬性)為何,如範例中的${processid}|${longdate}|${level:uppercase=true}|${event-context:item=Context}|${logger}|${message}。

修改完定義檔後,點選Add new format按鈕加入定義檔便可在列表中看到自訂的定義檔。我們可以利用Move up把自定義檔移到最上方做為最優先被Legit Log Viewer選擇到的定義檔。


以下有幾點需額外注意
  1. Multiline屬性只能出現在最後一個LogFieldFormat中,否則載入定義檔時會出現錯誤訊息。因此也建議如果要顯示多行資料的話最好放在最後一欄。

  2. 載入定義檔後,若之後定義檔有任何修改,必須先刪除原來的定義檔後再重新載入才會生效,這部份算是使用上較為不方便的地方

接下來至Logs-> Open Log載入要檢視的log檔便可顯示在Legit Log Viewer裡。載入後我們可以透過Message filter功能輸入關鍵字來過濾出我們想要的資訊。


若log檔內容有更新,Legit Log Viewer也會提醒使用者是否顯示更新過後的內容。


No comments: