【问题标题】:NLog autoreload does not workNLog 自动重载不起作用
【发布时间】:2016-05-13 19:29:36
【问题描述】:

我创建了一个示例 Windows 应用程序来测试 NLog。我只是在 while 循环(跟踪、调试、警告和错误)中编写所有消息级别。我在 NLog 配置文件中设置了 autoReload='true' 并指定了 minlevel="Debug"。这工作正常并打印所有消息。

我想测试 autoreload 选项,因此在配置文件中手动将 minlevel 更改为“Warn”,以便在应用程序运行时仅记录警告消息,但仍然记录所有消息而不是仅记录警告和错误消息。

但是如果我重新启动应用程序,它会从配置中获取并仅打印警告和错误级别的消息。据我基于link 的理解,NLog 应该在配置更改时重新加载配置,并且应该根据当前配置更改开始打印日志。不知道出了什么问题。我是否必须以编程方式重新加载配置?请帮忙。以下是我的代码,

NLog.config

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true"
      throwExceptions="true"
      internalLogLevel="Trace" internalLogFile="c:\temp\nlog-internal.log" >

  <targets>

    <target name="FileLogger" xsi:type="File" archiveAboveSize="1048576" fileName="Trace.log" archiveNumbering="DateAndSequence"   />
  </targets>

  <rules>
    <logger name="*" writeTo="FileLogger" minlevel="Debug"  />
  </rules>
</nlog>

LogMessage 代码片段

private void LogMessages(CancellationToken token)
        {
            try
            {
                while (true)
                {
                    logger.Debug("*********** Debug *************");
                    logger.Trace("----------- Trace --------------");
                    logger.Warn("~~~~~~~~~~~ Warn ~~~~~~~~~~~~~~");
                    logger.Error("========== Error =============");

                    if (token.IsCancellationRequested)
                        break;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

我怀疑这是否是由于线程/任务而发生的,并直接从主线程开始运行,但问题仍然存在。我还尝试启用 NLog 内部日志记录以查看是否有任何错误,但找不到任何可疑之处。

【问题讨论】:

  • 你的logger是怎么得到的?
  • 您是在编辑项目中的配置文件,还是 bin\Debug 或 bin\Release 目录中的配置文件?
  • 我正在从项目中进行编辑。这是愚蠢的错误。谢谢。当我从 Release 目录编辑时,它可以工作。

标签: c# logging nlog


【解决方案1】:

您是否尝试过设置LogManager.GlobalThreshold 属性?尝试这样做,之后不要忘记LogManager.ReconfigExistingLoggers()

【讨论】:

  • 感谢您为我提供答案。这是我的错误,我是从项目而不是发布目录进行编辑。无论如何,我不知道 GlobalThreshold 属性。会看看。
  • 那很好,但在生产代码中,如果您想动态更改日志配置,我的回答是比修改配置文件更好的决定。
猜你喜欢
  • 1970-01-01
  • 2015-02-15
  • 1970-01-01
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
相关资源
最近更新 更多