2

ログ/トレースに System.Diagnostics TraceSource を使用する場合、TraceSource.TraceTransfer と TraceSource.TraceEvent(TraceEventType.Transfer, ... の使用に違いはありますか?

この環境では、WCF を介して通信する多数のサービスを開発します。また、ロギング/トレースに使用するプラットフォームを評価しています。少なくとも部分的には、CorrelationManager、ActivityID、TraceTransfer などを使用してサービス間でログを関連付けることができるため、System.Diagnostics の使用に傾いています。

TraceSource のドキュメントを見ると、TraceTransfer メソッドと、TraceEventType.Transfer をイベント タイプとして使用できる TraceEvent があることがわかります。いつどちらを使用しますか? Start/Stop の使用方法と、ActivityID および CorrelationManager の管理方法を示すhereのような例を見てきましたが、TraceSource.TraceEvent(TraceEventType.Transfer, ... ) を使用している人はほとんど見たことがありません。ここに、TraceEventType.Transfer の使用 (および明示的な TraceTransfer の呼び出し) を示す例があります。

この時点で、私は実際に自分の質問に答え始めているかもしれません...

TraceSource.TraceTransfer は、パラメーターとして渡される ActivityID を使用して明示的に何かを行っているようですが、TraceSource.TraceEvent(TraceEventType.Transfer, ...) を呼び出しても ActivityID を使用して明示的に何もしていないようです (パラメーターとして渡されないため)。 )。本当に別のイベントをログに記録しているように見えますが、それはたまたま Transfer イベントですが、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 に答える