我正在使用NLog和配置文件。 为了避免登录太多的东西了一些长期的治疗,我做这样的事情:如何强制重新载入NLog配置文件?
foreach (LoggingRule rule in LogManager.Configuration.LoggingRules)
{
rule.DisableLoggingForLevel(LogLevel.Trace);
rule.DisableLoggingForLevel(LogLevel.Debug);
}
LogManager.ReconfigExistingLoggers();
它让我暂时降低日志记录的详细程度。上面的几行只是一个例子来说明。 这似乎很好地工作。
之后,我想恢复我的“常规”日志配置,只需通过重新加载我的NLog.Config文件,该文件已在程序启动时自动加载。 我已经试过:
LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();
我认为这将是容易的,但configuration.Reload没有做什么,我期待,我没有发现任何其他合适的方法。 调用之后,我的记录器在程序启动时仍不存储跟踪和调试事件。
所以我的问题是:如何以编程方式强制在运行时重新加载NLog.config并恢复我的“标准”日志记录器设置?
感谢
更多的细节问题更新:
我使用VS2013,.NET 4中谟与NLOG 4.4.0-beta11(测试阶段,但最后上的NuGet),简单的 “文件”目标在配置文件中使用minLevel = Trace和autoReload = True来定义
Logger在类级别实例化: private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
这里是我的测试证明:
Assert.True(Logger.IsTraceEnabled);
Assert.True(Logger.IsDebugEnabled);
Logger.Trace("1 - This should appear in log");
Logger.Debug("2 - This should appear in log");
foreach (LoggingRule rule in LogManager.Configuration.LoggingRules)
{
rule.DisableLoggingForLevel(LogLevel.Trace);
rule.DisableLoggingForLevel(LogLevel.Debug);
}
LogManager.ReconfigExistingLoggers();
Logger.Trace("3 - This should NOT appear in log");
Logger.Debug("4 - This should NOT appear in log");
Logger.Info("5 - This should appear in log");
Assert.False(Logger.IsDebugEnabled);
Assert.False(Logger.IsTraceEnabled);
LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();
// This is were something goes wrong
Logger.Trace("6 - This should appear in log"); // DOES NOTHING
Logger.Debug("7 - This should appear in log"); // DOES NOTHING
Logger.Info("8 - This should appear in log");
Assert.True(Logger.IsDebugEnabled); // FAILS
Assert.True(Logger.IsTraceEnabled); // FAILS
生成的日志:
TRACE 1 - This should appear in log
DEBUG 2 - This should appear in log
INFO 5 - This should appear in log
INFO 8 - This should appear in log
在n日志内部日志,我可以看到的配置似乎已经重新装入没问题(很长的文件,所以我除非有人询问,否则不要在这里发布),但也许现有的记录器不会更新?
上面的代码应该很容易在你身边试试。请让我知道如果我做错了什么或者它是否是NLog配置管理中的错误。
这是使用它的正确方法。检查内部日志,它会告诉重新加载时发生的情况。 – Julian
你好。很高兴知道。明天,我将启用Nlog内部日志,并提供详细信息并随时通知您。谢谢 – AFract
你好@朱连。我已经在上面发布了完全正确的测试,但仍然存在问题。你可以检查一下吗?非常感谢你,如果我认为你是NLog的主要作者之一,我很高兴几年以来对我的所有项目都非常满意。 – AFract