2012年6月20日 星期三

NLog 輸出記錄資訊到 Visual Studio Output 視窗

 

NLog 有支援很多不同的 targets,在 NLog 的首頁上有列出一些比較常用到的,

  • Files – single file or multiple, with automatic file naming and archival
  • Event Loglocal or remote
  • Database – store your logs in databases supported by .NET
  • Network – using TCP, UDP, SOAP, MSMQ protocols
  • Command-line console – including color coding of messages
  • E-mail – you can receive emails whenever application errors occur
  • ASP.NET trace

    … and many more

    其中比較常用到的應該是 Files, Database 以及 Email,不過 NLog 能夠支援的 targets 的清單如下:

    http://nlog-project.org/wiki/Targets

    image

     

    而這些 NLog 所記錄的 Log 在我們 Debug 時還要去另外開啟資料庫工具或是開啟檔案、收信等,才能夠看到 Log 內容,

    有時候在 Visual Studio 進入偵錯模式的時候,不會想再分神去開啟別的工具來看這些 Log 檔案,

    而會希望能夠把一些不需要記錄到 Log 資料庫的訊息給顯示在某個地方,讓我們執行到某些地方就可以看到記錄,

    有一些寫 ASP.NET 的朋友最常用的方式就是 …… ResponseWrite() 與 Javascript 的 Alert() ……

    但這不是一個好的方式。

     


    其實呢 …… 我們可以把 Log 訊息輸出到 Visual Studio 的 Output,

    例如說,我們可以用程式指令去輸出程式中的一些要觀察的值,變數名稱或是物件的欄位值內容等,

    image

    MSDN - Debug.WriteLine 方法

    HOW TO: Visual C# .NET 中的 Trace 和 Debug 類別

     

    下圖就是在 Output 視窗中輸出 debug 訊息內容的情形,

    image

     

    但如果沒有把 Log 訊息給顯示到 Output 視窗,而 Log 訊息是會輸出到「即時運算視窗」的話,就必須做下的修改設定,

    Visual Studio 2010  > 工具 > 選項

    image

    在「Debugger」選項的「一般」設定中,把「將所有輸出視窗文字重新導向到即時運算視窗」這個項目給取修勾選

    image

    如此一來就可以正常在 Visual Studio 的 Output 視窗中輸出 debug 訊息內容。

     

     

    NLog - Debugger target

    Writes log messages to the attached managed debugger.

     

    除了使用 System.Diagnostics 的 Debug.Write() 或 Debug.WriteLine() 方法之外,

    如果專案有加入使用 NLog 的話,其實也可以使用 NLog 來讓這些 Debug 或是 Trace 訊息給顯示到 Output 視窗中,

    接下來就介紹如何透過 NLog 將 Log 訊息顯示到 Output 視窗。

     

    首先要在 NLog.Config 中的 targets section 增加一個別為 Debugger 的 target,

    image

    接著就是在 rules 中增加 logging rule,適合輸出到 Output 視窗的 Log Level 為 Trace, Debug,

    所以我們可以將 logging rule 設定如下:

    image

     

    再來就是在程式裡去使用,例如……

    image

    然後當我們在 Visual Studio 進入偵錯模式之後,在 Output 視窗就可以看到 log 訊息內容了,

    image

    這樣的訊息內容看起來是有點陽春,所以我們可以做些調整。

  •  

    targets

    分成兩個,這是因為有些訊息的資料依據 Log Level : Trace, Debug 的不同而使用不同的 target,

    image

     

    rules

    logging rule 也拆分成兩個,分別使用不同的 target

    image

     

    輸出的 Log 訊息內容就會有點變化,而且也比較容易清楚閱讀訊息內容。

    image

     


    就是這樣,介紹使用 NLog 於進入偵錯模式時,可以把 Trace, Debug 的 Log 訊息顯示到 Visual Studio 的 Output 視窗,

    這樣的作法並不會影響到頁面的顯示,所以無需在系統上線時要去修改程式,

    而且透過 NLog,可以自己定義要顯示輸出的內容以及格式,讓我們在觀看 Output 視窗的 Log 訊息時可以清楚閱讀。

     

    相關連結:

    NLog - Targets

    NLog - Layout Renderers

     

    以上

    沒有留言:

    張貼留言

    提醒

    千萬不要使用 Google Talk (Hangouts) 或 Facebook 及時通訊與我聯繫、提問,因為會掉訊息甚至我是過了好幾天之後才發現到你曾經傳給我訊息過,請多多使用「詢問與建議」(在左邊,就在左邊),另外比較深入的問題討論,或是有牽涉到你實作程式碼的內容,不適合在留言板裡留言討論,請務必使用「詢問與建議」功能(可以夾帶檔案),謝謝。