[C#.NET] 開發夥伴的除錯利器 NLog - 使用 NLog.Elmah target 整合至 Elmah(2)

續上篇:http://www.dotblogs.com.tw/yc421206/archive/2015/10/12/153536.aspx

有關 Elmah 的設定請參考:http://www.dotblogs.com.tw/yc421206/archive/2014/05/22/145209.aspx

Nuget 上有一套 NLog.Elmah 的套件,顧名思義這是用來整合 Elmah 的套件,NLog 不像 Elmah 那樣有漂亮的報表可以看,藉由這個套件可以輕鬆讓 NLog 整合至 Elmah,簡單來講就是在 NLog 的 target 增加一個 Elmah

續上篇:http://www.dotblogs.com.tw/yc421206/archive/2015/10/12/153536.aspx

有關 Elmah 的設定請參考:http://www.dotblogs.com.tw/yc421206/archive/2014/05/22/145209.aspx

Nuget 上有一套 NLog.Elmah 的套件,顧名思義這是用來整合 Elmah 的套件,NLog 不像 Elmah 那樣有漂亮的報表可以看,藉由這個套件可以輕鬆讓 NLog 整合至 Elmah,簡單來講就是在 NLog 的 target 增加一個 Elmah

image

 

增加 <extensions> 區段,然後加入 NLog.Elmah,他是組件名稱

<extensions>
  <add assembly="NLog.Elmah" />
</extensions>

 

在<targets>加入elmah

<target xsi:type="Elmah"
        name="elmah"
        layout="${longdate} ${uppercase:${level}} ${message}"
        LogLevelAsType="true" />

最後在 <rules> 調用elmah target

<logger name="*" minlevel="Debug" writeTo="elmah" />

 

完整 NLog.Config


<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="false"
      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
  <extensions>
    <add assembly="NLog.Elmah" />
  </extensions>
  
  <variable name="myvar" value="myvalue" />

  <targets>
    <target xsi:type="Elmah"
            name="elmah"
            layout="${longdate} ${uppercase:${level}} ${message}"
            LogLevelAsType="true" />
  </targets>

  <rules>
    <logger name="*" minlevel="Debug" writeTo="elmah" />
  </rules>
</nlog>

調用 NLog


{
    protected void Page_Load(object sender, EventArgs e)
    {
        Logger logger = LogManager.GetCurrentClassLogger();
        logger.Trace("我是Trace");
        logger.Debug("我是Debug");
        logger.Info("我是Info");
        logger.Warn("我是Warn");
        logger.Error("我是Error");
        logger.Fatal("我是Fatal");
    }
}

 

你看,輕鬆寫入到 Elmah 資料庫了

image

 

 

這時運行 Elmah 的網頁是看不到資料的,原來 Application 的欄位若是空的 Elmah 的報表不會呈現

 

解法就是讓 elmah 自動帶入 application,在組態檔裡指定 applicationName="MyApi"

<elmah>
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" applicationName="MyApi" />
</elmah>

 

再次運行觀察 elmah 的資料庫已經有 NLog 資料

image

 

此時,在 elmah 報表畫面裡也能顯示 NLog 的記錄了

image

 

 


我一直苦於無法直接由 NLog 整合 Elmah 的 User 欄位,Bibby 寫過一篇實作 TargetWithLayout http://bibby.be/2012/08/nlog-elamh.html,他可滿足我的需求,操作步驟他也寫了很清楚,有興趣的在前往觀看。

 

文章出自:http://www.dotblogs.com.tw/yc421206/archive/2015/10/12/153537.aspx

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo