NLog 在 appsettings 中使用连接字符串名称
NLog use Connection String Name in appsettings
我有一个 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 改为使用我的应用程序设置中的 connectionStringName?
我的应用程序设置名为 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 ver. 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 中的 source-code 作为加载 dssettings.json
的灵感。或者创建 PullRequest 以添加对指定非默认配置文件名的支持。
我有一个 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 改为使用我的应用程序设置中的 connectionStringName?
我的应用程序设置名为 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 ver. 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 中的 source-code 作为加载 dssettings.json
的灵感。或者创建 PullRequest 以添加对指定非默认配置文件名的支持。