Design

Design
asp.net mvc

2017年5月27日 星期六

Nlog trace code 追蹤你的code

Nlog?

一個非常好用的code trace library 怎樣好用呢
往往我們專案Debug 會去需要看我們的錯誤 localhost Deubg 當然沒什麼問題
但是如果我們網站已經上線或是已經在server的測試階段,我們後端引發前端的錯誤
你很難依照當前頁面去判斷,而且很常就是我localhost 沒問題啊 怎上server 就有問題.
這時候我們就需要去在我們的程式碼加上記錄錯誤訊息的方法 這時候就需要用到我們的nlog
不只記錄exception,你也可以當作操作紀錄去分析client端的操作.
而且我們不只本機可以記錄 還可以連接我們的db 或是連接例如slack,exceptionless


開始吧 首先Install
Install-Package NLog.Config
這時候會發現我們的專案多了個Nlog.Config
我們先從程式開始說
用法很簡單我們建立一個static 
namespace MyNamespace
{
  public class MyClass
  {
    private static Logger logger = LogManager.GetCurrentClassLogger();
  }
}
or
using NLog;

Logger logger = LogManager.GetLogger("MyClassName");

接著我們可以分別去依照級別去寫log了


using NLog;

public class MyClass
{
  private static Logger logger = LogManager.GetCurrentClassLogger();

  public void MyMethod1()
  {
    logger.Trace("Sample trace message");
    logger.Debug("Sample debug message");
    logger.Info("Sample informational message");
    logger.Warn("Sample warning message");
    logger.Error("Sample error message");
    logger.Fatal("Sample fatal error message");

    // alternatively you can call the Log() method
    // and pass log level as the parameter.
    logger.Log(LogLevel.Info, "Sample informational message");
  }
}


什麼? 就這樣?  沒錯就是這樣
但是最重要的 我是要記錄在哪??
這時候就要轉到一開始所說的nlog.config了
target  -主要就是我們指定的rule 跟存放的位置 layout 共同顯示的東西
rules 就是我們指定的規則會指向哪個target 做存放
我個人是習慣分 共用跟嚴重的  共用的就拿來放操作紀錄或是一些訊息 嚴重的就拿來顯示錯誤訊息 其實我是覺得盡量別分太多 不然你到時候debug 開那麼多資料夾來比對也是很累
只要你寫入log 時想好  你要怎規劃方面你去搜尋


產出來 如果按照上面原本預設的fileName路徑 就會在我們專案底下多個logs的資料夾 這部分你也可以自己規畫要放在哪





當然nlog 不只這些用法 還有最重要的存入DB 或是寄mail阿 之類的
有興趣可以去github上面讀一下 有更多更高端的配置用法
https://github.com/NLog/NLog/wiki/Tutorial



總結
當然其實叫夯的做法就是連結slack或exceptionless
我們又站在巨人肩膀上做事了,這兩套主要都有強大的搜尋功能.
其實該把log寫在哪裡也是一門學問
我總不可能在每個方法裡去新增log 太笨了.
其實方法有很多種 ex  HTTP  Handlers  或是搭配一些AOP framework  ex Castle.DynamicProxy, Unity Interception 去攔截, Spring AOP, PostSharp  這些都很好用
跟AOP(Aspect-Oriented Programming)脫離不瞭87%關係,蝦? 你說AOP是啥??
有空後面再補上nlog 怎搭配web api 去AOP的去紀錄request response
跟連結slack或exceptionless的方法

沒有留言:

張貼留言