特定のオブジェクト (LogMessage) が受信されたときにのみログに記録するカスタム TraceListener 実装があります。メソッドで直接使用する場合、これはすべてうまく機能しTrace.Write(object)
ます。
パフォーマンス上の理由から、リスナーを分離したいので、関係のないトレース メッセージはすべてリスナーに渡されません。したがって、このリスナーのみがアタッチされた特定の TraceSource を作成しました。
現在、TraceSource を使用してカスタム ログ オブジェクト (LogMessage) をリスナーに渡すのに苦労しています。は、メソッドではなく、TraceSource.TraceData(TraceEventType, int, object)
常にメソッドを呼び出します。TraceListener.Write(string)
TraceListener.Write(object)
TraceSource を使用してリスナーにカスタム オブジェクトを渡す方法はありますか?
サンプルコード:
using System.Diagnostics;
namespace Sample
{
public class LogMessage
{
public byte[] Data { get; set; }
//...
}
public class Sample
{
public void Foo()
{
var ts = new TraceSource("Test");
var lm = new LogMessage();
//lm.Data = ...;
//this works: calls the Write(object) method in listener
Trace.Write(lm);
//this doesn't work: calls the Write(string) method in listener
ts.TraceData(TraceEventType.Information, 0, lm);
}
}
public class MyListener : TraceListener
{
public override void Write(string message)
{
//not in use
}
public override void WriteLine(string message)
{
//not in use
}
public sealed override void Write(object o)
{
if (o is LogMessage)
{
//do someting with the LogMessage
}
}
}
}
ありがとうトーマス