7

大規模で古いアプリケーションをサポートしています。Debug.WriteLineこのコードでは、とだけでなく NLog も使用していますTrace.WriteLine。Debug.WriteLine と Trace.WriteLine を Nlog ファイルにリダイレクトしようとしています。すべてが1か所にあるように。現時点では、出力ウィンドウにあるものとログ ファイルにあるものがあります。

この記事に従って、NLogTraceListener を使用しました

その記事では、System.Net と System.Net.Sockets がログ ファイルにシャントされています。私はそれを試してみましたが、うまくいきます。System.Net および System.Net.Sockets メッセージがファイルに記録されています。 This SO articleは同じことを説明しています-そしてそれは機能します。

うまくいかないのは、自分の名前空間とクラスから自分のメッセージをログ ファイルに記録することです。

System.Diagnostics.Debug.WriteLine("This won't end up in the log file");
System.Diagnostics.Trace.WriteLine("This won't end up in the log file");

アプリからソース名を名前空間に変更しようとしました。うまくいきませんでした。ファイルにログを記録するための独自の WriteLines を取得できません。Visual Studio の出力ウィンドウには引き続き表示されます。

例えば:

    <system.diagnostics>
        <sources>
            <source name="MyAppNamespace" switchValue="All">
                <listeners>
                    <add name="nlog" />
                </listeners>
            </source>
        </sources>
        <sharedListeners>
            <add name="nlog" type="NLog.NLogTraceListener, NLog" />
        </sharedListeners>
    </system.diagnostics>

明示的な NLog 呼び出しは、ログ ファイルに問題なく記録されます。

NLog.LogManager.GetCurrentClassLogger().Trace("This Works");
4

1 に答える 1

16

NLogにログを記録するように TraceSource を構成しましたが、トレース ステートメントはその TraceSource を使用していません。

試す:

<system.diagnostics>
    <trace>
      <listeners>
          <add name="nlog" type="NLog.NLogTraceListener, NLog" />
      </listeners>
    </trace>
</system.diagnostics>

または、構成した TraceSource を使用します。次に例を示します。

TraceSource source = new TraceSource("MyAppNamespace");
source.TraceEvent(TraceEventType.Warning, 2, "File Test not found");
于 2013-10-03T21:08:34.610 に答える