Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System.diagnostics 如何通过TraceSource调用TraceListener.Write(对象)_System.diagnostics_Tracelistener_Tracesource - Fatal编程技术网

System.diagnostics 如何通过TraceSource调用TraceListener.Write(对象)

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

我们有一个定制的TraceListener实现,它只在收到特定对象(LogMessage)时记录日志。当直接使用
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并处理重写中的对象。我想这会起作用,解决我的问题。周末后你会明白的。非常感谢!