【问题标题】:NLog: Dev vs Prod Connection StringNLog:开发与产品连接字符串
【发布时间】:2018-07-16 23:47:35
【问题描述】:

NLog 是否提供了一种基于我当前环境设置连接字符串的方法。

在 Dev 我想去我的本地数据库。

在 Prod 中,我想访问我的生产数据库。

我不想在推送更新之前手动更改配置文件。每次我更新...我宁愿不维护多个配置文件,我需要记住为每次更改更新所有配置文件。

理想情况下,我可以调用一个实用方法,该方法已经在控制应用程序的其余部分可以访问哪个数据库。

【问题讨论】:

  • 您可能应该研究发布、发布管理和配置转换。如果这太宽泛,那么只需发布和配置转换。如果您没有使用 ASP.Net,那么您可能需要查看 SlowCheetah。
  • 你在用.net core吗?
  • 不使用 .NET Core。
  • 我目前正在通过 Azure SDK 发布。它有自己的 xxx.Cloud.cscfg 和 xxx.Prod.cscfg。这仍然让我维护多个我不想做的配置文件。
  • 这其实和NLog本身没什么关系。正如@YuriyFaktorovich 建议的那样,您应该研究发布管理。无论您是要发布还是转换,在某种程度上都是一个偏好问题,但我想说您必须“广泛地”解决这个问题,而不仅仅是您的日志记录。

标签: c# .net logging nlog


【解决方案1】:

您可以在启动时将连接字符串放入全局变量中:

https://github.com/NLog/NLog/wiki/Gdc-layout-renderer

然后您可以使用 ConnectionString 属性从数据库目标中引用此全局变量。

<target name="database" xsi:type="Database" connectionString="${gdc:item=MyCustomProperty}">
   <parameter name="@message" layout="${message}" />
</target>

【讨论】:

  • 这不仅适用于 Layout 属性吗?如果是这样,那听起来正是我想要的。会试一试。
  • 它只能用于 Layout-properties。 Database.ConnectionString 是一个布局属性。
  • 我理解的方式是 部分是需要数据库信息的地方,而 部分是用于格式化的。您是否有包含数据库信息的 部分的示例?
  • 布局是一种数据类型(如字符串)。一些 NLog 目标有一个称为 Layout 类型的 Layout 属性。但 Database-Target 没有。数据库目标主要使用其参数(每个参数都有各自的布局)。我猜您已经运行了一个示例,并且知道如何编写 xml 属性。现在添加了一些示例 xml。
【解决方案2】:

查看Slow Cheetah,我们将其用于所有配置文件(App.Config.Web.Config、NLog.Config 等)。

它可以根据我们的编译构建配置 Debug/Staging/Release 转换行或完成部分配置 XML。

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 2014-11-29
    • 1970-01-01
    • 2014-10-25
    • 2018-06-10
    • 2021-12-20
    • 2015-11-30
    • 2015-08-29
    • 2015-01-13
    相关资源
    最近更新 更多