我们有一个自定义 TraceListener 实现,它只在收到特定对象(LogMessage)时记录。当直接使用该Trace.Write(object)
方法时,这一切都很好。
由于性能原因,我想将监听器分开,所以所有不相关的 Trace 消息都不会传递给监听器。因此,我创建了一个特定的 TraceSource,只附加了这个监听器。
现在我很难使用 TraceSource 将我的自定义日志对象 (LogMessage) 传递给侦听器。TraceSource.TraceData(TraceEventType, int, object)
总是调用方法,而TraceListener.Write(string)
不是TraceListener.Write(object)
方法。
有什么方法可以使用 TraceSource 将自定义对象传递给 Listener?
示例代码:
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
}
}
}
}
谢谢托马斯