web-dev-qa-db-ja.com

C#デバッグ出力を.txtファイルに書き込む

。NET Micro Framework を使用してマイクロコントローラーでコードを実行していて、デバッグ出力をテキストファイルに書き込みたい。これはどのように作動しますか?

17
755

トレース を使用します。それはあなたが必要なことをするように設計されています。

using System;
using System.Diagnostics;

class Test
{
    static void Main()
    {
       Trace.Listeners.Add(new TextWriterTraceListener("yourlog.log"));
       Trace.AutoFlush = true;
       Trace.Indent();
       Trace.WriteLine("Entering Main");
       Console.WriteLine("Hello World.");
       Trace.WriteLine("Exiting Main");
       Trace.Unindent();
       Trace.Flush();
    }
}
24
Ekk

すぐに使用できるトレースを使用するための最も柔軟なソリューションは、トレースリスナーを定義するアプリケーション構成ファイルを作成することです。

<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="textListener" 
             type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="trace.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

次に、アプリケーションで、何かをログに記録するときはいつでも、次のようにします。

Trace.WriteLine("Hello, this is a trace");

ただし、TraceListenerクラスの能力は、その粒度にあります。エラー、情報、警告の各レベルから選択し、トレースする必要のあるレベルに応じて異なるログファイルを定義できます。構成ファイルを使用すると、アプリケーションを再コンパイルする必要がないため、アプリケーションでトレースを無効にすることも簡単になります。

トレースシステムの詳細については、これを確認してください MSDNの記事

14
Ucodia

Ekkは、Traceがより優れた設計であることについて正しいですが、それは質問に答えません。直接的な解決策がなければ問題ありません。 OPまたは誰かが、全体でデバッグを使用するコードベースを継承している可能性があり、その時点ではトレースが望ましくない可能性があります。

私はこの解決策を見つけました[ http://bytes.com/topic/c-sharp/answers/273066-redirect-output-debug-writeline]

TextWriterTraceListener[] listeners = new TextWriterTraceListener[] {
new TextWriterTraceListener("C:\\debug.txt"),
new TextWriterTraceListener(Console.Out)
};

Debug.Listeners.AddRange(listeners);

Debug.WriteLine("Some Value", "Some Category");
Debug.WriteLine("Some Other Value");
10
Todd

あなたはこのようなことをしなければならないでしょう:

// Set up listener
string filename = @"C:\listener.txt";
FileStream traceLog = new FileStream(filename, FileMode.OpenOrCreate);
TextWriterTraceListener listener = new TextWriterTraceListener(traceLog);

// Output to listener
listener.WriteLine("Trace message here");

// Flush any open output before termination.
// Maybe in an override of Form.OnClosed.
listener.Flush();

ここ から取得。

別の関連する質問

0
Aamir