(NLog) 何时调用 ReconfigExistingLoggers?

(NLog) When to call ReconfigExistingLoggers?

哪些类型的更改需要调用 ReconfigExistingLoggers?

在我的特定用例中,我从配置文件加载所有内容,然后:

  1. 删除目标
  2. 删除本应记录到目标的规则

似乎 在我不调用 ReconfigExistingLoggers 的情况下工作,但我想确保我没有遗漏任何东西。

此外,我正在考虑使用变量的重构。这意味着我将有一个使用变量的目标和一个记录到该目标的单一规则。在运行时,我会set/update那个变量。

是否需要调用 ReconfigExistingLoggers?

我的具体用例是围绕 Syslog 目标:

当我的软件启动时,它需要决定是登录到SyslogServerA 还是SyslogServerB。我目前的做法是:

  1. 在我的配置文件中配置两个服务器
  2. 在我的配置文件中配置规则以登录到两个服务器
  3. 启动时,确定我应该登录的服务器
  4. 删除另一个目标和规则

我可以想出几种方法来实现仅记录到单个系统日志服务器的最终目标,但我不确定哪种方法最好。

它的价值:如果我的目标和规则都处于活动状态,那么随着时间的推移,我会遇到内存失控问题。这就是我主动禁用未使用的 UDP 系统日志目标的原因。

LogManager.ReconfigExistingLoggers() 应该在拥有 added/updated/removed LoggingRules 之后显式调用(类似于提交操作)。它将刷新所有活动记录器对象的配置。它还将执行任何新 NLog 目标的同步初始化,因此当调用完成时,所有更改都已应用。

NLog 使用以下方法从配置中删除现有目标:

NLog 支持在应用程序处于 运行 时更改 LoggingConfiguration(例如,添加删除 LoggingRules 和目标)。但是建议预先注册所有的NLog目标,然后使用semi-dynamic-filtering到enable/disable输出到相关的NLog目标(注意minLevel="Off"表示禁止输出到目标)