【问题标题】:NLog Configuration Reload Event Not firingNLog 配置重新加载事件未触发
【发布时间】:2020-02-28 02:28:33
【问题描述】:

我从配置中初始化 NLog,然后通过代码添加额外的目标和规则。目标和规则应该始终是配置文件可能会或可能不会更改的配置的一部分。我需要配置重新加载才能调用我的方法,该方法添加了我的额外目标和规则,但是我无法验证事件是否被触发。

我已尝试将我的事件处理程序添加到 LogManager 和 LogManager.LogFactory,已连接 Reloaded 和 Changed(尽管我只需要 Reloaded)。调用 LogManager.Configurtion = LogManager.Configuration.Reload() 并重新配置现有记录器,但我的事件方法仍未调用。

private static void ConfigurationReloadedHandler(object sender, LoggingConfigurationReloadedEventArgs args) { 
 System.Diagnostics.Trace.WriteLine("Configuration was reloaded");
}

[Test]
public void WillCallReloadHandler() {
   System.Diagnostics.Trace.WriteLine("Loading Config");
   LogManager.LoadConfiguration("nlog.config");
   LogManager.LogFactory.ConfigurationReloaded += ConfigurationReloadedHandler;
   LogManager.Configuration = LogManager.Configuration.Reload();
   LogManager.ReconfigExistingLoggers();
}

预期结果将是我的输出窗口中的 2 条消息,其中一条表示配置已重新加载。实际结果是 1 条消息,表示它正在加载配置。

【问题讨论】:

    标签: c# configuration reload nlog


    【解决方案1】:

    ConfigurationReloaded 仅在检测到底层nlog.config 已被修改时由 NLog 调用。

    您可以这样做:

    LogManager.ConfigurationChanged += LogManager_ConfigurationChanged;
    
    private static void LogManager_ConfigurationChanged(object sender, LoggingConfigurationChangedEventArgs e)
    {
        System.Diagnostics.Trace.WriteLine("Configuration was changed");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 2023-03-07
      • 2013-11-23
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      相关资源
      最近更新 更多