【问题标题】:NLog use Connection String Name in appsettingsNLog 在 appsettings 中使用连接字符串名称
【发布时间】:2019-05-27 09:22:49
【问题描述】:

我有一个如下所示的 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" 
  },

【问题讨论】:

  • 您不应该将连接字符串存储在任何一个中,它不安全,您可能会不小心将其提交到您的源代码控制管理系统(Git、CSV 等)中。使用user secrets,环境变量或azure key value store
  • 我明白,但这是针对一个已经使用 appsettings 一段时间的小项目。
  • 您可以考虑使用NLog Configuration API

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


【解决方案1】:

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

【讨论】:

  • 您好,感谢您的回复。那么有可能有2个appsettings.json吗?所以一个 dssettings.json 和一个 appsettings.json
  • ConfigurationBuilder.AddJsonFile 可以从任何文件名加载。但就像我说的,你必须自己实现逻辑。也许将其作为拉取请求提供,允许提供自定义文件名。
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多