NLog:如果 LoggingConfiguration.AddRule() 添加时没有名称,则按名称删除日志记录规则?

NLog: Remove logging rule by name if it was added without name by LoggingConfiguration.AddRule()?

我是 NLog 的新手,但我想在过去的几个小时里我已经很好地理解了它是如何工作的。

深入研究 NLog API 后,出现了几个有关日志记录规则的问题。其中之一是:
如何按名称(使用 LoggingConfiguration.RemoveRuleByName())删除之前由 LoggingConfiguration.AddRule() 以编程方式添加的规则?

在写题的过程中,我找到了解决方法,在此分享。

LoggingConfiguration.LoggingRules 集合是一个 IList<LoggingRule>,因此支持 Add()Clear()
因此可以将 LoggingRule 个对象直接添加到此列表中。 LoggingRule 对象可以通过 IList<>.Remove() 再次删除,如果它有名称,则通过 LoggingConfiguration.Remove().

添加命名规则的示例:

var loggingRule1 = new NLog.Config.LoggingRule ();
loggingRule1.RuleName = nameof (loggingRule1); // RuleName can also be set in constructor.
loggingRule1.LoggerNamePattern = "*";
loggingRule1.SetLoggingLevels (NLog.LogLevel.Info, NLog.LogLevel.Error);
loggingRule1.Targets.Add (consoleTarget);
loggingConfiguration.LoggingRules.Add (loggingRule1);

var loggingRule2 = new NLog.Config.LoggingRule ("*", NLog.LogLevel.Trace, NLog.LogLevel.Trace, consoleTarget) { RuleName = "loggingRule2" };
loggingConfiguration.LoggingRules.Add (loggingRule2);

logFactory.ReconfigExistingLoggers ();
// or, if config was not yet set to logFactory: logFactory.Configuration = loggingConfiguration;

删除命名规则的示例:

loggingConfiguration.RemoveRuleByName (nameof (loggingRule1));
logFactory.ReconfigExistingLoggers ();

恕我直言,API 的文档很少。我会建议一些更全面的描述。