TraceListener を実装して Debug.WriteLine/Print の出力先を変更/追加する方法
Debug.WriteLine や Debug.Print の出力先を追加する方法です。出力先を Twitter にした例は、こちら。[Visual Studio] Debug.WriteLine でツイートできる NuGet パッケージを作った
コード中の Debug.WriteLine の記述などはそのままに、ログの出力先を追加したり、標準では用意されていないところ(特定のデータベースなど)に出力したりできます。
カスタム TraceListener クラスの作成
TraceListener クラス (System.Diagnostics) を継承したクラスを作ります。
Write と WriteLine メソッドを最低限実装すればよいのでお手軽です。データベースなど所望の場所に出力しましょう。標準でいくつか TraceListener を継承したクラスがあるので、まずそれも確認しておくとよいです。
C# サンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class FooTraceListener : TraceListener | |
{ | |
public override void Write(string message) | |
{ | |
// どこかに出力する | |
} | |
public override void WriteLine(string message) | |
{ | |
// どこかに出力する | |
} | |
} |
Visual Basic (VB.NET) サンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 で追加して使います。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static void Main(string[] args) | |
{ | |
Trace.Listeners.Add(new FooTraceListener()); | |
Debug.WriteLine("こんばんは"); | |
} |
App.config に記述
コードに追加せず、App.config や Web.config に、次のように <system.diagnostics>
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<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」が、参考になります。