TraceListener を実装して Debug.WriteLine/Print の出力先を変更/追加する方法
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)
{
// どこかに出力する
}
}
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
出力先の追加(使い方)
コードに記述
作った カスタム TraceListner クラスは、次のように Trace.Listeners.Add で追加して使います。
static void Main(string[] args)
{
Trace.Listeners.Add(new FooTraceListener());
Debug.WriteLine("こんばんは");
}
App.config に記述
コードに追加せず、App.config や Web.config に、次のように <system.diagnostics>
<system.diagnostics>
<trace>
<listeners>
<add name="myListener" type="Foo.Diagnostics.FooTraceListener,FooTraceListener" />
</listeners>
</trace>
</system.diagnostics>
Foo.Diagnostics.FooTraceListener は、名前空間を含むクラス名、その後の FooTraceListener は、アセンブリ名(DLL の名前)です。適宜、置き換えてください。
また、.config ファイルに TraceListener 用のパラメーターを持たせることができます。「独自の TraceListener 実装でそのリスナー独自の構成パラメータを指定するには : @jsakamoto」が、参考になります。




