NLog輸出日誌到Azure Blob儲存
針對.Net Framework的日誌,還是選擇NLog比較好,方便,.Net core選擇Serilog更好,本文記錄下NLog日誌輸出到Azure Blob儲存。
第一步:引用Nuget包
<package id="NLog" version="4.7.15" targetFramework="net461" />
<package id="NLog.Extensions.AzureBlobStorage" version="3.1.0" targetFramework="net461" />
github地址為:
https://github.com/NLog/NLog
https://github.com/JDetmar/NLog.Extensions.AzureStorage/blob/master/src/NLog.Extensions.AzureBlobStorage/README.md
第二步,新增NLog.config配置檔案,內容如下
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<extensions>
<add assembly="NLog.Extensions.AzureBlobStorage" />
</extensions>
<targets>
<!--<target name="logfile" xsi:type="File" fileName="log.txt" />-->
<target name="logconsole" xsi:type="Console" />
<target type="AzureBlobStorage"
name="Azure"
layout="${longdate:universalTime=false} ${level:uppercase=true} - ${logger}: ${message} ${exception:format=tostring}"
connectionString="blob連線字串"
container="容器名"
blobName="${date:universalTime=false:format=yyyy-MM}/${date:universalTime=false:format=dd}/${logger}.log">
<metadata name="mymeta" layout="mymetavalue" />
<!-- Multiple allowed -->
</target>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="logconsole" />
<!--<logger name="*" minlevel="Info" writeTo="logfile" />-->
<logger name="*" minlevel="Info" writeTo="Azure" />
</rules>
</nlog>
配置裡面的layout是日誌輸出格式,blobName是日誌檔名稱格式
官方說明為:
https://nlog-project.org/config/?tab=layout-renderers
第三步,在Azure儲存裡面新增容器container
新增好之後,馬上使用感覺日誌沒有輸出,程式也沒報錯,這種情況,沒處理,等了半天日誌才進去,不知道為啥。
第四步,程式碼裡面寫日誌
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("日誌");
Tip:如果用了其他的Azure相關的庫,可能會存在依賴項不同版本的衝突,導致釋出不成功。需要在web.config使用assemblyBinding 屬性
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Azure.Core" publicKeyToken="92742159e12e44c8" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.4.1.0" newVersion="1.4.1.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
上述配置意思為,Azure.Core包存在的多個版本從0.0.0.0-1.4.1.0。都使用1.4.1.0這個版本。