如何在运行时提高NLog日志级别

Dom*_*que 6 c# debugging runtime nlog log-level

log.Trace()我的应用程序在程序的开头有太多的内容,导致程序出现故障,所以我无法使用通用NLog配置来提高日志级别。

所以,我想提高运行时的日志级别。为此,我在互联网上找到了类似的内容:

foreach (var rule in LogManager.Configuration.LoggingRules)
{
    // Iterate over all levels up to and including the target, (re)enabling them.
    for (int i = 0; i <= 5; i++)
    {
        rule.EnableLoggingForLevel(LogLevel.FromOrdinal(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用,因为以下行没有显示在日志中,尽管我确信这一行已经通过:

log.Trace("log trace works!");
Run Code Online (Sandbox Code Playgroud)

有谁知道一种方法来确保从我的源代码中的某个时刻开始,我可以看到log.Trace()结果?

供你参考:

  1. log定义为private static readonly Logger log = LogManager.GetCurrentClassLogger();.
  2. 我一直在寻找nlog.*包含<nlog>标签的文件,但没有找到任何内容。

编辑:
我正在使用NLog4.5.4 版本。

Edit2(尝试强制读取配置):
我已修改nlog.config文件如下:

foreach (var rule in LogManager.Configuration.LoggingRules)
{
    // Iterate over all levels up to and including the target, (re)enabling them.
    for (int i = 0; i <= 5; i++)
    {
        rule.EnableLoggingForLevel(LogLevel.FromOrdinal(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试强制重新读取该配置,如下所示:

NLog.LogManager.Setup().LoadConfigurationFromFile("C:\\...\\NLog.config");
Run Code Online (Sandbox Code Playgroud)

提前致谢

sup*_*fly 9

循环后调用LogManager.ReconfigExistingLoggers()似乎对我有用。

配置

<logger name="*" minlevel="Info" writeTo="console" />
Run Code Online (Sandbox Code Playgroud)

代码

logger.Trace("Trace 1");
logger.Info("Info 1");

foreach (var rule in LogManager.Configuration.LoggingRules)
{
    for (var i = 0; i <= 5; i++)
    {
        rule.EnableLoggingForLevel(LogLevel.FromOrdinal(i));
    }
}

LogManager.ReconfigExistingLoggers();

logger.Trace("Trace 2"); // This is now printed.
logger.Info("Info 2");
Run Code Online (Sandbox Code Playgroud)