Asp.net

NLog 在 appsettings 中使用連接字元串名稱

  • December 29, 2020

我有一個看起來像這樣的 NLog 數據庫目標:

<target xsi:type="Database" name="database"
     connectionString="Server=.\SQLEXPRESS;Database=ApplicationOne;Trusted_Connection=True;MultipleActiveResultSets=true;User Id=User0101;Password=PW0101"   
     commandText="INSERT INTO [SchemaOne].[EventLogs](Id, Message, Level, Logger )VALUES(NewID(), @Message, @Level, @Logger)">
 <parameter name="@Message" layout="${message}" />
 <parameter name="@Level" layout="${level}" />
 <parameter name="@Logger" layout="${logger}" />
</target>

是否可以將 connectionString 更改為使用我的 appsettings 中的 connectionStringName ?

我的 appsettings 被稱為 dssettings.json ,它在此處包含連接詳細資訊:

"DatabaseConfiguration": {
   "DatabaseName": "ApplicationOne",
   "ConnectionName": "DefaultConnection",
   "ConnectionString": "Server=.\\SQLEXPRESS;Database=ApplicationOne;Trusted_Connection=True;MultipleActiveResultSets=true;User Id=User0101;Password=PW0101" 
 },

更新 NLog.Extension.Logging 版本。1.4.0

使用 NLog.Extension.Logging 版本。1.4.0 然後你現在可以使用${configsetting}

另請參閱:https ://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer

原始答案

在 nuget-package NLog.Appsettings.Standard的幫助下,您通常可以執行以下操作:

 <extensions>
   <add assembly="NLog.Appsettings.Standard" />
 </extensions>
 <targets>
   <target xsi:type="Database" name="database"
         connectionString="${appsettings:name=DatabaseConfiguration.ConnectionString}"   
         commandText="INSERT INTO [SchemaOne].[EventLogs](Id, Message, Level, Logger )VALUES(NewID(), @Message, @Level, @Logger)">
     <parameter name="@Message" layout="${message}" />
     <parameter name="@Level" layout="${level}" />
     <parameter name="@Logger" layout="${logger}" />
   </target>
 </targets>

但是因為您使用的是特殊的dssettings.json(而不是 appsettings.json),所以您可能必須實現自己的自定義 NLog 佈局渲染器:

https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer

也許您可以使用上述 nuget-package 中的原始碼作為 loading 的靈感dssettings.json。或者可能創建 PullRequest 以添加對指定非預設配置文件名的支持。

引用自:https://stackoverflow.com/questions/53977365