【问题标题】:How to set up NLog configuration file load/reload when the app-config path is changed?更改 app-config 路径时如何设置 NLog 配置文件加载/重新加载?
【发布时间】:2017-12-29 13:32:48
【问题描述】:

.Net 应用程序的设置使得同一程序的多个实例将(重新)使用相同的应用程序配置(.exe.config - app.config 在 Visual Studio 中)。

在我们的场景中,我们需要使用自己的.exe.config 运行每个实例。这不是 .Net 要做的“开箱即用”的事情。然而,这个漂亮的小包装器为我们解决了问题:https://stackoverflow.com/a/6151688/95008

这对我们来说很好,直到我们意识到 NLog 似乎不尊重 app-config 更改。我们在.exe.config 中为 NLog 添加了一个配置部分,这应该使每个实例都可以使用不同的规则和目标记录到不同的位置。

但是,NLog 似乎不尊重 app-config 更改。我的猜测是,它在内部不是通过 AppSettings API 询问其配置部分,而是可能使用代码手动查找 .exe.config 和其中的配置部分。

所以,似乎有三种选择:

  1. 查看 NLog 在未来版本中更改此代码(鉴于这确实是问题)。我将发布该项目的问题以进行更新:链接到NLog issue
  2. 从 .exe.config 部分或从特定的 nlog.config 文件(可能通过 .exe.config 中的设置给出)手动加载配置。但是,我们如何有效地做到这一点,以便创建的任何记录器都基于手动加载的配置?
  3. 也许还有其他解决方案?

【问题讨论】:

  • 你不能这样做吗:stackoverflow.com/questions/37687546/…
  • 谢谢。可能是。我自己只是在看,但我希望有一个更简单的解决方案。
  • @rene 实际上,那里的答案似乎并不完全是我们正在寻找的,因为只是重新加载仍然会尝试相同的 .exe.config。但是,其中一个 cmets 看起来很有希望:NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(NLogConfigFile_Dst, true); NLog.LogManager.ReconfigExistingLoggers();

标签: c# .net app-config nlog


【解决方案1】:

我的猜测是它在内部没有通过 AppSettings API 询问其配置部分,而是可能使用代码手动查找 .exe.config 和其中的配置部分。

没错,因为 NLog 对 NLog 的配置使用相同的代码,无论是在 web.config 中还是在 nlog.config 中

在代码中重新加载配置很容易,只需这样做:

NLog.LogManager.Configuration = NLog.LogManager.Configuration.Reload();

如果在重新加载配置之前创建了记录器,

NLog.LogManager.ReconfigExistingLoggers()

【讨论】:

  • 谢谢。但是,这只会触发重新加载,对吧?它不会理解 app.config 不是位于二进制文件旁边的那个,afaict?
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多