logo头像

Edward.K Thinking

Azure Application Insights結合NLog擴大企業運用

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
8
private readonly ILogger _logger;

Publid void Test()
{
_logger = LogManager.GetCurrentClassLogger();
_logger.Error("Error: Parameter is empty2.");
_logger.Warn("TEST1");
}

安裝好套件好,會出現一個警告訊息

如果你有用到NLog.Config時候,必須移除Targets,extensionsrules這幾個Tag,主要是因為這些Tag會放到web.config中或App.config

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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
2
3
4
5
6
7
<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,這樣方式就可以增加運用彈性了

上一篇