NLog 自动重载不起作用
NLog autoreload does not work
我创建了一个示例 windows 应用程序来测试 NLog。我只是在一个 while 循环(跟踪、调试、警告和错误)中编写所有消息级别。我在 NLog 配置文件中设置了 autoReload='true'
并指定了 minlevel="Debug"
。这工作正常并打印所有消息。
我想测试 autoreload 选项,因此在配置文件中手动将最小级别更改为 "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;
}
}
我怀疑这是否是因为 thread/task 并直接从主线程启动 运行,但问题仍然存在。我还尝试启用 NLog 内部日志记录以查看是否有任何错误,但找不到任何可疑的东西。
你有没有试过设置 LogManager.GlobalThreshold
property? Try doing that and don't forget to LogManager.ReconfigExistingLoggers()
之后
我创建了一个示例 windows 应用程序来测试 NLog。我只是在一个 while 循环(跟踪、调试、警告和错误)中编写所有消息级别。我在 NLog 配置文件中设置了 autoReload='true'
并指定了 minlevel="Debug"
。这工作正常并打印所有消息。
我想测试 autoreload 选项,因此在配置文件中手动将最小级别更改为 "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;
}
}
我怀疑这是否是因为 thread/task 并直接从主线程启动 运行,但问题仍然存在。我还尝试启用 NLog 内部日志记录以查看是否有任何错误,但找不到任何可疑的东西。
你有没有试过设置 LogManager.GlobalThreshold
property? Try doing that and don't forget to LogManager.ReconfigExistingLoggers()
之后