【C#】Traceの出力先をファイルに変更する

Traceの出力先をファイルにしたりカスタムクラス用いて任意の出力先を設定する方法の紹介です。

確認環境

  • Windows11
  • VisualStudio2022
  • .NET 7.0

.NET 7.0 で確認しましたがどの環境でも同じです。

Traceの出力先の変更方法

出力先の変更方法は Trace.ListenersTraceListener を継承したクラスを指定します。

Trace.Listeners.Add(TraceListener);

トレースに出力が不要な場合は Listeners を削除してから追加します。

// 出力先をクリアする
Trace.Listeners.Clear();
// 新しい出力先を指定する
Trace.Listeners.Add(TraceListener);

標準で TraceListener を継承したクラスがあるため併せて紹介します。

  • DefaultTraceListener: デバッグウインドウに内容を出力する
  • ConsoleTraceListener: コンソールに出力する
  • TextWriterTraceListener: テキストに出力する

出力先をファイルに変更する

単純にファイルに出力するだけであれば TraceListener を継承した TextWriterTraceListener が標準であるのでこれを使用します。

var text = new TextWriterTraceListener(@"d:\sample.txt");
Trace.Listeners.Add(text);

カスタム出力先を指定する

以下のように TraceListener を継承したクラスを作成できます。

// Traceへの出力をファイルへ書き出すためのクラス
public class FileListner : TraceListener
{
    // 出力するファイルパス
    private string _path;

    // 出力するファイルパスを指定してオブジェクトを初期化する
    public FileListner(string filePath) => _path = filePath;

    // 基底クラスのメソッドの実装
    public override void Write(string message)
    {
        using (var sw = File.AppendText(_path))
        {
            sw.Write(message);
        }
    }
    public override void WriteLine(string message)
    {
        using (var sw = File.AppendText(_path))
        {
            sw.WriteLine(message);
        }
    }
}

使用方法は以下の通りです。

var text = new FileListner(@"d:\sample.txt");
Trace.Listeners.Add(text);