如何关联 SignalR Write() 和 WriteLine() 跟踪消息
How can I correlate SignalR Write() and WriteLine() trace messages
我正在实施自定义的服务器端 TraceListener
以将 SignalR 跟踪重定向到我的日志记录服务。在测试时,我使用 SignalR help page 的方向通过 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
列在正下方并带有缩进。我在连接了多个客户端的情况下对此进行了测试,并且跟踪始终写入正确分组的文件中。
我使用博客 here 实现了我的自定义 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()
写入的。
我不希望主题和跟踪级别是一个日志行,而消息是另一个。是否有任何其他方法可以确保这些将一起输出到日志记录服务?
解决方案是覆盖所有 TraceListener
Trace*()
方法,而不是 Write()
和 WriteLine()
方法。这使我不仅可以访问单个字符串。
我正在实施自定义的服务器端 TraceListener
以将 SignalR 跟踪重定向到我的日志记录服务。在测试时,我使用 SignalR help page 的方向通过 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
列在正下方并带有缩进。我在连接了多个客户端的情况下对此进行了测试,并且跟踪始终写入正确分组的文件中。
我使用博客 here 实现了我的自定义 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()
写入的。
我不希望主题和跟踪级别是一个日志行,而消息是另一个。是否有任何其他方法可以确保这些将一起输出到日志记录服务?
解决方案是覆盖所有 TraceListener
Trace*()
方法,而不是 Write()
和 WriteLine()
方法。这使我不仅可以访问单个字符串。