for WPF developers
Home Profile Tips 全記事一覧

Debug クラスによるログファイル出力

(2016/12/02 23:57:32 created.)

Debug クラスはプリプロセスシンボル DEBUG が定義されていない場合はコンパイル対象にはならないため、Release 構成で出力されるアセンブリにはそのコードが含まれないことになります。したがって、あくまでもデバッグ情報として残したいときなどに使用します。

そもそもデバッグ出力をおこなうと出力ウィンドウに表示されるのは、デバッグ出力を監視するリスナーに既定値として設定されているからです。実はこのリスナーはいくつも登録することができます。つまり、このリスナーとしてファイルに保存するリスナーを追加することでログファイルへ出力することができるようになります。登録されているリスナーは Debug. Listeners プロパティで確認することができます。コレクション操作が可能なので、登録追加/解除も簡単におこなえます。ただし、出力ウィンドウへ出力するためのリスナーも含まれているため、Debug.Listeners.Clear() メソッドを実行してしまうと、出力ウィンドウにすら出力されなくなってしまうので注意が必要です。

ファイル出力するためのリスナーは TextWriterTraceListener クラスである必要があります。例えば log.txt というテキストファイルに出力するリスナーを追加するには次のようにします。

Program.cs
  1. var fileListener = new TextWriterTraceListener("log.txt", "LogFile");
  2. Debug.Listeners.Add(fileListener);
  3. Debug.AutoFlush = true;

この 3 行を実行すると、Debug.WriteLine() メソッドなどでデバッグ出力をおこなうと、自動的に log.txt テキストファイルにメッセージが追加されていくようになります。3 行目の Debug.AutoFlush プロパティを false にすると、デバッグ出力をおこなってもただちにファイルへ出力せず、Debug.Flush() メソッドを呼び出すとこれまで書き込んでいなかった分のデバッグ出力がファイルへ出力されるようになります。