为什么没有为我的 NLog 设置 LogLevel 规则?

Why the LogLevel rule is not set for my NLog?

我想以编程方式设置日志级别。 但是当我查看我的日志时,所有日志都被写入(从 Trace 到 Error)。 我像 Whosebug.

上的示例一样对其进行编码
foreach (var rule in NLog.LogManager.Configuration.LoggingRules)
{
    //rule.EnableLoggingForLevel(nlogLevel);
    rule.EnableLoggingForLevels(NLog.LogLevel.Warn, NLog.LogLevel.Fatal);
}
NLog.LogManager.ReconfigExistingLoggers();
Logger.LogTrace("LogLevel Trace");
Logger.LogDebug("LogLevel Debug");
Logger.LogInformation("LogLevel Info");
Logger.LogWarning("LogLevel Warn");
Logger.LogError("LogLevel Error");

我试过了

rule.EnableLoggingForLevel(nlogLevel); 

rule.EnableLoggingForLevels(NLog.LogLevel.Warn, NLog.LogLevel.Fatal);

日志的屏幕截图:

为什么我不能更改日志级别?

这是正确的,启用一个日志级别并不意味着禁用另一个。

否则这将是一个问题:

rule.EnableLoggingForLevel(LogLevel.Warn);
rule.EnableLoggingForLevel(LogLevel.Error); // luckily this won't disable Warn

你可以做什么:

首先禁用所有日志级别,然后启用您需要的那些

rule.DisableLoggingForLevels(LogLevel.Trace, LogLevel.Fatal); // disable all
rule.EnableLoggingForLevels(NLog.LogLevel.Warn, NLog.LogLevel.Fatal); // enable needed

对于这种情况 - 所有规则的最低要求 - 还有一种更简单的方法:

LogManager.GlobalThreshold = LogLevel.Info; // For all rules, minimum is Info

请注意,您的代码中默认启用所有级别的原因尚不清楚。这是在 nlog.config 或代码中配置的,因为这不是 NLog 的默认值。

这也发生在我身上,我在更改日志级别后 运行 LogManager.ReconfigExistingLoggers(); 解决了它。

这适用于您的情况:

rule.SetLoggingLevels(NLog.LogLevel.Warn, NLog.LogLevel.Fatal);

来自文档:

Enables logging the levels between (included) minLevel and maxLevel. All the other levels will be disabled.