TraceListener を実装して Debug.WriteLine/Print の出力先を変更/追加する方法

DevelopmentC#, Visual Basic

Debug.WriteLine や Debug.Print の出力先を追加する方法です。出力先を Twitter にした例は、こちら。[Visual Studio] Debug.WriteLine でツイートできる NuGet パッケージを作った

コード中の Debug.WriteLine の記述などはそのままに、ログの出力先を追加したり、標準では用意されていないところ(特定のデータベースなど)に出力したりできます。

カスタム TraceListener クラスの作成

TraceListener クラス (System.Diagnostics) を継承したクラスを作ります。

Write と WriteLine メソッドを最低限実装すればよいのでお手軽です。データベースなど所望の場所に出力しましょう。標準でいくつか TraceListener を継承したクラスがあるので、まずそれも確認しておくとよいです。

C# サンプル

public class FooTraceListener : TraceListener
{
public override void Write(string message)
{
// どこかに出力する
}
public override void WriteLine(string message)
{
// どこかに出力する
}
}

view raw
FooTraceListener.cs
hosted with ❤ by GitHub

Visual Basic (VB.NET) サンプル

Public Class FooTraceListener
Inherits TraceListener
Public Overrides Sub Write(message As String)
' どこかに出力する
End Sub
Public Overrides Sub WriteLine(message As String)
' どこかに出力する
End Sub
End Class

view raw
FooTraceListener.vb
hosted with ❤ by GitHub

出力先の追加(使い方)

コードに記述

作った カスタム TraceListner クラスは、次のように Trace.Listeners.Add で追加して使います。

static void Main(string[] args)
{
Trace.Listeners.Add(new FooTraceListener());
Debug.WriteLine("こんばんは");
}

view raw
Program.cs
hosted with ❤ by GitHub

App.config に記述

コードに追加せず、App.config や Web.config に、次のように <system.diagnostics> に値を追加し、記述しても使えます。

<system.diagnostics>
<trace>
<listeners>
<add name="myListener" type="Foo.Diagnostics.FooTraceListener,FooTraceListener" />
</listeners>
</trace>
</system.diagnostics>

view raw
app.config
hosted with ❤ by GitHub

Foo.Diagnostics.FooTraceListener は、名前空間を含むクラス名、その後の FooTraceListener は、アセンブリ名(DLL の名前)です。適宜、置き換えてください。

また、.config ファイルに TraceListener 用のパラメーターを持たせることができます。「独自の TraceListener 実装でそのリスナー独自の構成パラメータを指定するには : @jsakamoto」が、参考になります。