System.diagnostics 如何通过TraceSource调用TraceListener.Write(对象)
我们有一个定制的TraceListener实现,它只在收到特定对象(LogMessage)时记录日志。当直接使用System.diagnostics 如何通过TraceSource调用TraceListener.Write(对象),system.diagnostics,tracelistener,tracesource,System.diagnostics,Tracelistener,Tracesource,我们有一个定制的TraceListener实现,它只在收到特定对象(LogMessage)时记录日志。当直接使用Trace.Write(object)方法时,这一切都很好 由于性能原因,我想分离侦听器,因此所有不相关的跟踪消息都不会传递给侦听器。因此,我创建了一个特定的TraceSource,其中只附加了这个侦听器 现在,我很难使用TraceSource将自定义日志对象(LogMessage)传递给侦听器。TraceSource.TraceData(TraceEventType,int,obje
Trace.Write(object)
方法时,这一切都很好
由于性能原因,我想分离侦听器,因此所有不相关的跟踪消息都不会传递给侦听器。因此,我创建了一个特定的TraceSource,其中只附加了这个侦听器
现在,我很难使用TraceSource将自定义日志对象(LogMessage)传递给侦听器。TraceSource.TraceData(TraceEventType,int,object)
总是调用TraceListener.Write(string)
方法,而不是TraceListener.Write(object)
方法
是否有任何方法可以使用TraceSource将自定义对象传递给侦听器
示例代码:
使用系统诊断;
名称空间示例
{
公共类日志消息
{
公共字节[]数据{get;set;}
//...
}
公共类样本
{
公共图书馆
{
var ts=新的跟踪资源(“测试”);
var lm=新的日志消息();
//lm.数据=。。。;
//这样做有效:在侦听器中调用Write(object)方法
Trace.Write(lm);
//这不起作用:在侦听器中调用Write(string)方法
ts.TraceData(TraceEventType.Information,0,lm);
}
}
公共类MyListener:TraceListener
{
公共重写无效写入(字符串消息)
{
//不用
}
公共覆盖无效写线(字符串消息)
{
//不用
}
公共密封覆盖无效写入(对象o)
{
如果(o是日志消息)
{
//对日志信息做些什么
}
}
}
}
谢谢
托马斯也许现在回答问题太晚了,但无论如何: 通过使用像JustDecompile这样的工具,您可以很容易地看到TraceSource.TraceData使用TraceListener.TraceData方法,该方法本身基本上使用object.ToString()调用WriteLine来获取消息
因此,您必须重写类LogMessage的ToString方法,以便执行您想要的操作。谢谢您的回复。我不知道根据定义TraceListener.TraceData使用ToString()方法。但是我们需要在侦听器中传递对象,然后将该对象转换回自定义日志消息并发送到日志服务器。您的信息让我想到了重写TraceListener.TraceData并处理重写中的对象。我想这会起作用,解决我的问题。周末后你会明白的。非常感谢!