Application Insights功能多好用,之前已經有提過,不過,在Application Insights前,大部分開發者都會用NLog來做Log蒐集器,如果,要大家改用Application Insights話,難不成之前有寫Log的地方,都要改用TelemetryClient.TrackEvent
方式改寫嗎?這樣似乎會讓系統改到天荒地暗,企業內部的系統又多的跟山一樣,要一一改進似乎不太可能
還好我們可以透過Application Insights NLog Target
的套件
讓我們原本用NLog儲存的資訊,直接透過此套件傳送到Application Insights中,例如原本是
1 2 3 4 5 6 7
| private readonly ILogger _logger; Publid void Test() { _logger = LogManager.GetCurrentClassLogger(); _logger.Error("Error: Parameter is empty2.");
_logger.Warn("TEST1"); }
|
安裝好套件好,會出現一個警告訊息
如果你有用到NLog.Config時候,必須移除Targets
,extensions
和rules
這幾個Tag,主要是因為這些Tag會放到web.config中或App.config
1 2 3
| <configSections>
<section name="nlog" type="NLog.Config.ConfigSectionHandler, NLog" />
</configSections> ......... <nlog>
<extensions>
<add assembly="Microsoft.ApplicationInsights.NLogTarget" />
</extensions>
<targets>
<target type="ApplicationInsightsTarget" name="aiTarget" />
</targets>
<rules>
<logger name="*" minlevel="Trace" writeTo="aiTarget" />
</rules>
</nlog>
|
這樣原本的程式一行都不用改唷,就可以搬到NLog中,如果想要混搭原本TelemetryClient
語法也是可以的,並不會受限制,不過,若是你依舊想要原本在Local端也可以繼續記錄Log話,只要把原本在NLog.Config中你的設定值,例如下面
1
| <target type="File" name="f"
fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}"
maxArchiveFiles="30"
concurrentWrites="true"
/>
<target type="Debugger" name="debugger" layout="${longdate} ${uppercase:${level}} ${message}"/>
|
搬到App.config或是Web.config的NLog
Tag下面就可以囉,同時地端與雲端都存放Log,這樣方式就可以增加運用彈性了