2

使用 System.Diagnostics TraceSource 进行日志记录/跟踪时,使用 TraceSource.TraceTransfer 和 TraceSource.TraceEvent(TraceEventType.Transfer, ... 是否有区别?

在我们的环境中,我们将开发许多将通过 WCF 进行通信的服务。我们还在评估我们应该使用什么平台来记录/跟踪。我们倾向于使用 System.Diagnostics,至少部分是因为能够使用 CorrelationManager、ActivityID、TraceTransfer 等关联服务之间的日志。

我可以在 TraceSource 的文档中看到它有一个 TraceTransfer 方法以及一个可以将 TraceEventType.Transfer 作为事件类型的 TraceEvent。你什么时候使用一个与另一个?我见过像这里这样的例子,它们展示了如何使用 Start/Stop 以及如何管理 ActivityID 和 CorrelationManager,但我很少看到有人使用 TraceSource.TraceEvent(TraceEventType.Transfer, ... )。这里有一个示例显示使用 TraceEventType.Transfer(以及显式调用 TraceTransfer)。

至此,也许我实际上已经开始回答我自己的问题了……

似乎 TraceSource.TraceTransfer 正在使用作为参数传递的 ActivityID 显式执行某些操作,而调用 TraceSource.TraceEvent(TraceEventType.Transfer, ...) 并没有显式对 ActivityID 执行任何操作(因为它没有作为参数传递)。看起来它实际上只是在记录另一个事件,恰好是一个传输事件,但没有对 CorrelationManager 或其他任何东西做任何其他事情。

谢谢你的帮助。

4

1 回答 1

2

根据 TraceSource.TraceTransfer 的MSDN 文档,TraceSource.TraceTransfer 调用 TraceListener.TraceTransfer。TraceListener.TraceTransfer 的基本实现只调用 TraceListener.TraceEvent(TraceEventType.Transer, ...),将传递给 TraceSource.TraceTransfer 的 guid 的字符串表示形式传递。

因此,在我看来, TraceSource.TraceTransfer 提供了明确指示正在发生活动转移的方法。在调用站点,使用 TraceSource.TraceTransfer 更加明显和类型安全。如果实现 TraceListener,您可以利用显式 TraceTransfer 调用和活动 id 作为 Guid 传入的事实来执行您想要在传输活动 id 时执行的任何特殊工作。

于 2010-11-08T18:25:43.107 回答