續上篇: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
增加 <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 資料庫了
這時運行 Elmah 的網頁是看不到資料的,原來 Application 的欄位若是空的 Elmah 的報表不會呈現
解法就是讓 elmah 自動帶入 application,在組態檔裡指定 applicationName="MyApi"
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sqlserver" applicationName="MyApi" />
</elmah>
再次運行觀察 elmah 的資料庫已經有 NLog 資料
此時,在 elmah 報表畫面裡也能顯示 NLog 的記錄了
我一直苦於無法直接由 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