如何关联 SignalR Write() 和 WriteLine() 跟踪消息

本文关键字:WriteLine 跟踪 消息 Write SignalR 关联 何关联 | 更新日期: 2023-09-27 18:31:07

我正在实现一个自定义的服务器端TraceListener,以将 SignalR 跟踪重定向到我的日志记录服务。在测试时,我使用 SignalR 帮助页面中的说明通过 web.config 实现了默认TextWriterTraceListener。使用 traceOutputOptions="Datetime, ThreadId, ProcessId" ,我得到如下跟踪:

SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(504a810d-4597-4dd7-9a93-eb49e76519d3)
    ProcessId=18508
    ThreadId=11
    DateTime=2016-01-20T15:51:05.7327980Z

其中跟踪的第一部分类似于主题和跟踪级别,跟踪的后半部分是实际消息,traceOutputOptions以缩进形式列在下面。我在连接多个客户端的情况下对此进行了测试,并且跟踪始终写入正确分组的文件。

我在这里使用博客实现了我的自定义TraceListener。我成功地拦截了跟踪,但问题是来自多个Write()调用的单个典型消息,以及最终的WriteLine()调用。如果我只是在每次Write()WriteLine()调用时将消息发送到我的日志,它们将显示为完全独立的日志消息。只需从我的TraceListener写入文本文件,我得到的输出如下:

SignalR.Transports.LongPollingTransport Verbose: 0 : 
DrainWrites(be9bc850-1453-4c0a-b1e4-3c1ecb8b0359)
ProcessId=23604
ThreadId=7
DateTime=2016-01-20T17:04:51.3859180Z

我可以看到关联这些的唯一方法是通过某种缓存通过调用Write()WriteLine()线程来跟踪它们,然后将完整的消息发送到 WriteLine() 上的日志服务,但前提是WriteLine()消息中没有traceOutputOptions的名称之一, 因为这些也是通过WriteLine()写入的。

我不希望主题和跟踪级别是一个日志行,而消息是另一个日志行。是否有任何其他方法可以确保将它们一起输出到日志记录服务?

如何关联 SignalR Write() 和 WriteLine() 跟踪消息

解决方案是覆盖所有TraceListener Trace*()方法,而不是Write()WriteLine()方法。这使我不仅可以访问单个字符串。