1. 程式人生 > 其它 >NLog輸出日誌到Azure Blob儲存

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這個版本。