C# 为什么未为我的NLog设置日志级别规则?
我想以编程方式设置日志级别。 但当我查找日志时,所有日志都是从跟踪写入错误的。 我像上面的例子那样编写代码 我试过了C# 为什么未为我的NLog设置日志级别规则?,c#,.net-core,command-line-interface,nlog,C#,.net Core,Command Line Interface,Nlog,我想以编程方式设置日志级别。 但当我查找日志时,所有日志都是从跟踪写入错误的。 我像上面的例子那样编写代码 我试过了 rule.EnableLoggingForLevel(nlogLevel); 及 日志的屏幕截图: 为什么我不能更改日志级别?这是正确的,启用一个日志级别并不意味着禁用另一个日志级别 否则,这将是一个问题: rule.EnableLoggingForLevel(LogLevel.Warn); rule.EnableLoggingForLevel(LogLevel.Error
rule.EnableLoggingForLevel(nlogLevel);
及
日志的屏幕截图:
为什么我不能更改日志级别?这是正确的,启用一个日志级别并不意味着禁用另一个日志级别 否则,这将是一个问题:
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的默认值。这是正确的,启用日志级别并不意味着禁用另一个日志级别 否则,这将是一个问题:
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.reconfigeExistingLoggers来解决它;更改日志级别后。这也发生在我身上,我可以通过运行LogManager来解决它;更改日志级别后。这将适用于您的情况:
rule.SetLoggingLevels(NLog.LogLevel.Warn, NLog.LogLevel.Fatal);
从文件:
允许记录包含的minLevel和maxLevel之间的级别。所有其他级别都将被禁用
这将适用于您的案例:
rule.SetLoggingLevels(NLog.LogLevel.Warn, NLog.LogLevel.Fatal);
从文件:
允许记录包含的minLevel和maxLevel之间的级别。所有其他级别都将被禁用
你试过禁用其他的吗?这很有趣,因为rule.DisableLoggingForLevelNLog.LogLevel.Trace;作品这不是我想要的方式,而是一个很好的解决方法。也许你有一个启用了所有级别的nlog.config?@LorenzoIsidori是的。但我认为无论我的nlog.config中写了什么,我都可以通过编程来设置它?!当然可以,但在开始时,NLog会从文件中加载他的配置。如果您的配置文件启用了所有级别,这将是您的默认设置…然后您可以覆盖级别。你能分享你的nlog.config吗?你试过禁用其他的吗?这很有趣,因为rule.DisableLoggingForLevelNLog.LogLevel.Trace;作品这不是我想要的方式,而是一个很好的解决方法。也许你有一个启用了所有级别的nlog.config?@LorenzoIsidori是的。但我认为无论我的nlog.config中写了什么,我都可以通过编程来设置它?!当然可以,但在开始时,NLog会从文件中加载他的配置。如果您的配置文件启用了所有级别,这将是您的默认设置…然后您可以覆盖级别。你能分享你的nlog.config吗?你可以只调用SetLoggingLevels,而不是调用DisableLoggingForLevels和EnableLoggingForLevels。你是对的。SetLoggingLevels已添加到NLog 4.5中,您可以只调用SetLoggingLevels,而不调用DisableLoggingForLevels和EnableLoggingForLevels。您是对的。NLog 4.5中增加了设置日志级别