升级至NLog 5.0:配置未生效问题排查
NLog 5.x 替代过时的
LogFactory(LoggingConfiguration)构造函数的正确方式 你遗漏的关键步骤是将创建好的LoggingConfiguration实例赋值给LogFactory.Configuration属性——原来的过时构造函数内部自动完成了这个绑定操作,而新的写法需要手动执行这一步。
修正后的测试代码
[Test] public void CustomLogFactoryShouldBehaveCompletelyIndependent() { var memoryTarget4 = new MemoryTarget(); memoryTarget4.Layout = "${level}|${logger}|${message}${exception}"; var memoryTarget5 = new MemoryTarget(); using (var customFactory = new LogFactory()) { var customConfig = new LoggingConfiguration(customFactory); customConfig.AddTarget("UnitTestLogger4", memoryTarget4); customConfig.LoggingRules.Add(new LoggingRule("UnitTestLogger4", LogLevel.Trace, memoryTarget4)); customConfig.AddTarget("UnitTestLogger2", memoryTarget5); customConfig.LoggingRules.Add(new LoggingRule("UnitTestLogger2", LogLevel.Info, memoryTarget5)); // 关键:将配置绑定到LogFactory,使其生效 customFactory.Configuration = customConfig; var logger4 = customFactory.GetLogger("UnitTestLogger4"); logger4.Trace("Test4"); Assert.That(memoryTarget4.Logs.Count, Is.EqualTo(1)); Assert.That(memoryTarget5.Logs, Is.Empty); memoryTarget4.Logs.Clear(); //... 其他测试逻辑 } }
补充说明
new LoggingConfiguration(customFactory)只是建立了配置与LogFactory的关联关系,但不会自动让LogFactory启用该配置,必须通过Configuration属性赋值完成加载。ReconfigExistingLoggers()的作用是刷新已创建的日志器的配置,它依赖于LogFactory已经有生效的配置,所以单独调用它无法解决配置未生效的问题。
内容的提问来源于stack exchange,提问作者PMF
相关产品推荐
相关产品推荐

