NLog如何在appsettings中使用连接字符串名称

9

我有一个类似于这样的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" 
  },

1
不应该将连接字符串存储在任何地方,因为它不安全,而且你可能会意外地将其提交到源代码管理系统(Git、CSV等)中。使用user secrets、环境变量或azure key value store - Tseng
1
我理解,但这是一个已经使用appsettings一段时间的小项目。 - JianYA
你可以考虑使用NLog配置API - R. Richards
1个回答

9

更新 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包中的源代码作为加载dssettings.json的灵感。或者创建PullRequest,添加支持指定非默认配置文件名的功能。

你好,谢谢回复。是否可以拥有2个appsettings.json文件?这样就可以有一个dssettings.json和一个appsettings.json了。 - JianYA
ConfigurationBuilder.AddJsonFile 可以从任何文件名加载。但正如我所说,您必须自己实现逻辑。也许可以将其作为拉取请求提供,以允许提供自定义文件名。 - Rolf Kristensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接