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# サンプル

https://gist.github.com/jz5/6e614a214a593b373359

Visual Basic (VB.NET) サンプル

https://gist.github.com/jz5/fe2d273e300c40d1213a

出力先の追加(使い方)

コードに記述

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

https://gist.github.com/jz5/a8258e951f66fdc160f3

App.config に記述

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

https://gist.github.com/jz5/d32236e9b6e712a988b4

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

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

DevelopmentC#,Visual Basic

Posted by jz5