2016-05-13 2 views
3

Я создал пример приложения Windows для тестирования NLog. Я просто пишу весь уровень сообщений внутри цикла while (Trace, Debug, Warn &). Я установил autoReload='true', а также указал minlevel="Debug" в файле конфигурации NLog. Это нормально работает и печатает все сообщения.NLog 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; 
      } 
     } 

Я подозревал ли это происходит из-за потока/задачи и начал работать непосредственно с основной поток, но проблема все еще сохраняется. Я также попытался включить внутреннее ведение журнала NLog для просмотра любых ошибок, но не нашел ничего подозрительного.

+0

Как вы получаете свой «регистратор»? – Amy

+2

Вы редактируете файл конфигурации в своем проекте или один из каталога bin \ Debug или bin \ Release? –

+1

Я редактировал проект. Это была глупая ошибка. Благодарю. Он работает, когда я редактирую из каталога Release. – Reuben

ответ

2

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

+1

Спасибо, что предоставил мне ответ. Это была моя ошибка, я редактировал проект, а не каталог выпуска. Во всяком случае, я не знаю свойства GlobalThreshold. Посмотрите. – Reuben

+0

Thats fine, но в производственном коде, если вы хотите динамически изменять конфигурацию ведения журнала, мой ответ является лучшим решением, чем изменение файла конфигурации. – Jakotheshadows