NLog在应用程序设置中使用连接字符串名称

时间:2018-12-30 11:55:53

标签: asp.net logging asp.net-core nlog

我有一个看起来像这样的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>

是否可以通过我的appsettings将connectionString更改为使用connectionStringName?

我的appsettings称为dssettings.json,它在此处包含连接详细信息:

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

1 个答案:

答案 0 :(得分:3)

在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.Extension.Logging版本。 1.4.0

使用NLog.Extension.Logging版本。 1.4.0,那么您现在可以使用${configsetting}

另请参阅:https://github.com/NLog/NLog/wiki/ConfigSetting-Layout-Renderer