2016-05-13 10 views
3

NLogをテストするためのサンプルWindowsアプリケーションを作成しました。私はちょうどwhileループ内にすべてのメッセージレベルを書いています(トレース、デバッグ、警告&エラー)。私はautoReload='true'を設定し、NLog設定ファイルでminlevel="Debug"と指定しました。これは正常に動作し、すべてのメッセージを印刷します。NLogの自動ロードが機能しない

私は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の内部ログを有効にしてエラーを確認しようとしましたが、疑わしいものは見つかりませんでした。

+0

あなたの 'logger'はどうやっていますか? – Amy

+2

あなたのプロジェクトで設定ファイルを編集していますか、bin \ Debugかbin \ Releaseディレクトリの設定ファイルを編集していますか? –

+1

私はプロジェクトから編集していました。それは間違ったミスでした。ありがとう。これは、リリースディレクトリから編集するときに機能します。 – Reuben

答えて

2

LogManager.GlobalThresholdプロパティを設定しようとしましたか?それをやってみてください。その後LogManager.ReconfigExistingLoggers()を忘れないでください。

+1

私に答えをくれてくれてありがとう。それは私の間違いだった、私はリリースディレクトリの代わりにプロジェクトから編集していた。とにかく私はGlobalThresholdプロパティを認識していません。見てみましょう。 – Reuben

+0

これは問題ありませんが、プロダクションコードでは、ロギング設定を動的に変更したい場合、私の答えは設定ファイルを変更するよりも良い決定です。 – Jakotheshadows

関連する問題