繁体   English   中英

如何在运行时增加 NLog 日志级别

[英]How to increase NLog log level at runtime

我的应用在程序开头有太多的log.Trace() ,导致程序运行不正常,所以我不能使用一般的NLog配置来提高日志级别。

所以,我想在运行时提高日志级别。 为此,我在 inte.net 上找到了类似这样的内容:

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));
    }
}

但是,这似乎不起作用,因为以下行没有出现在日志中,尽管我确定此行已通过:

log.Trace("log trace works!");

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

供你参考:

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

编辑:
我正在使用NLog版本 4.5.4。

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

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true">

    <variable name="myLevel" value="Trace" />
    <rules>
      <logger minLevel="${var:myLevel}" />
    </rules>
    ...

然后我尝试强制重新读取那个配置,如下:

NLog.LogManager.Setup().LoadConfigurationFromFile("C:\\...\\NLog.config");

提前致谢

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

配置

<logger name="*" minlevel="Info" writeTo="console" />

代码

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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM