如何在更改app-config路径时设置NLog配置文件加载/重新加载?

时间:2017-12-29 13:32:48

标签: c# .net app-config nlog

设置.Net应用程序,以便使用相同的应用程序配置(在Visual Studio中class Foo { public $bar = array(); public function __construct() {} public function add( $bar ) { if (isset($this->bar[ $bar['ID'] ]) && $this->bar[ $bar['ID'] ] instanceof Baz ) { // inctanceof not working as i am expecting. supposed to modify duplicate occurrence //if bar['ID'] is already instance of Baz then we are trying to modify bar ID before pass it so Baz. $bar['ID'] = $bar['ID'] . rand(); $this->bar[$bar['ID']]= new Baz( $bar ); } else { $this->bar[ $bar['ID'] ] = new Baz( $bar ); } } } - .exe.config(重新)使用相同程序的多个实例。

在我们的场景中,我们需要使用自己的app.config运行每个实例。这不是.Net被“开箱即用”的东西。然而,这个漂亮的小包装为我们提供了诀窍:https://stackoverflow.com/a/6151688/95008

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

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

所以,似乎有三种选择:

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

1 个答案:

答案 0 :(得分:0)

  

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

这是正确的,因为NLog使用与NLog的配置相同的代码,无论是在web.config中还是在nlog.config中

在代码中重新加载配置很简单:

NLog.LogManager.Configuration.Reload();

如果在重新加载配置之前有记录器,

NLog.LogManager.ReconfigExistingLoggers()