NLog autoreload не работает


Я создал пример приложения windows для тестирования NLog. Я просто записываю весь уровень сообщений внутри цикла while (Trace, Debug, Warn & Error). Я установил autoReload='true' , а также указал minlevel="Debug" в файле конфигурации NLog. Это прекрасно работает и печатает все сообщения.

Я хотел протестировать опцию autoreload и поэтому изменил minlevel на" Warn " вручную в конфигурационном файле, чтобы регистрировать только предупреждающие сообщения, пока приложение работает, но все равно все сообщения получают регистрируются вместо регистрации только предупреждения и сообщения об ошибках.

Но если я перезапущу приложение,оно возьмет из конфигурации и напечатает только предупреждения и сообщения об ошибках. Насколько я понимаю, основываясь на ссылке , 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:tempnlog-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, чтобы увидеть любые ошибки, но не смог найти ничего подозрительного.

1 3

1 ответ:

Вы пробовали установить LogManager.GlobalThreshold собственность? Попробуйте сделать это и не забудьте LogManager.ReconfigExistingLoggers() впоследствии