このトピックでは、トレースを有効にする方法、トレースを出力してトレース レベルを設定するようにトレース ソースを構成する方法、アクティビティ トレースと伝達をエンド ツー エンドのトレース相関関係をサポートするように設定する方法、トレースにアクセスするためのトレース リスナーを設定する方法について説明します。
運用環境またはデバッグ環境でのトレース設定の推奨事項については、「 トレースとメッセージ ログの推奨設定」を参照してください。
Von Bedeutung
Windows 8 では、アプリケーションがトレース ログを生成するために、アプリケーションを管理者特権で実行する (管理者として実行する) 必要があります。
トレースの有効化
Windows Communication Foundation (WCF) は、診断トレース用に次のデータを出力します。
操作呼び出し、コード例外、警告、その他の重要な処理イベントなど、アプリケーションのすべてのコンポーネントにわたるプロセス マイルストーンのトレース。
トレース機能が正常に動作しない場合の Windows エラー イベント。 イベント ログを参照してください。
WCF トレースは、 System.Diagnostics上に構築されます。 トレースを使用するには、構成ファイルまたはコードでトレース ソースを定義する必要があります。 WCF は、各 WCF アセンブリのトレース ソースを定義します。
System.ServiceModel
トレース ソースは最も一般的な WCF トレース ソースであり、転送の開始/終了からユーザー コードの入力/退出まで、WCF 通信スタック全体の処理マイルストーンを記録します。
System.ServiceModel.MessageLogging
トレース ソースは、システムを通過するすべてのメッセージを記録します。
トレースは既定では有効になっていません。 トレースをアクティブにするには、トレース リスナーを作成し、構成で選択したトレース ソースに対して "オフ" 以外のトレース レベルを設定する必要があります。それ以外の場合、WCF はトレースを生成しません。 リスナーを指定しない場合、トレースは自動的に無効になります。 リスナーが定義されているが、レベルが指定されていない場合、レベルは既定で "オフ" に設定されます。つまり、トレースは出力されません。
カスタム操作呼び出し子などの WCF 機能拡張ポイントを使用する場合は、独自のトレースを出力する必要があります。 これは、拡張ポイントを実装すると、WCF は既定のパスで標準トレースを出力できなくなるためです。 トレースを出力して手動トレースのサポートを実装しない場合は、予期したトレースが表示されないことがあります。
トレースを構成するには、アプリケーションの構成ファイル (Web ホスト型アプリケーションの場合は Web.config、セルフホステッド アプリケーションの場合は Appname.exe.config) を編集します。 このような編集の例を次に示します。 これらの設定の詳細については、「トレースを使用するようにトレース リスナーを構成する」セクションを参照してください。
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
注
Visual Studio で WCF サービス プロジェクトの構成ファイルを編集するには、アプリケーションの構成ファイル (Web ホスト型アプリケーションの Web.config か、 ソリューション エクスプローラーでセルフホステッド アプリケーション用の Appname.exe.config) を右クリックします。 次に、[ WCF 構成の編集] コンテキスト メニュー項目を選択します。 これにより 、構成エディター ツール (SvcConfigEditor.exe) が起動し、グラフィカル ユーザー インターフェイスを使用して WCF サービスの構成設定を変更できます。
トレースを出力するためのトレース ソースの構成
WCF は、各アセンブリのトレース ソースを定義します。 アセンブリ内で生成されたトレースは、そのソースに対して定義されたリスナーによってアクセスされます。 次のトレース ソースが定義されています。
System.ServiceModel: WCF 処理のすべてのステージをログに記録します。構成が読み取られるたびに、メッセージはトランスポート処理、セキュリティ処理、ユーザー コードでディスパッチされます。
System.ServiceModel.MessageLogging: システムを通過するすべてのメッセージをログに記録します。
System.IdentityModel。
System.ServiceModel.Activation。
System.IO.Log: 共通ログ ファイル システム (CLFS) への .NET Framework インターフェイスのログ記録。
System.Runtime.Serialization: オブジェクトが読み取られたり書き込まれたりしたときにログを記録します。
CardSpace。
次の構成例に示すように、同じ (共有) リスナーを使用するように各トレース ソースを構成できます。
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.Runtime.Serialization">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\Traces.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>
さらに、次の例に示すように、ユーザー定義トレース ソースを追加して、ユーザー コード トレースを出力できます。
<system.diagnostics>
<sources>
<source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\UserTraces.svclog" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
ユーザー定義トレース ソースの作成の詳細については、「 トレースの拡張」を参照してください。
トレースを使用するためのトレース リスナーの構成
実行時に、WCF はトレース データをリスナーにフィードし、データを処理します。 WCF には、出力に使用する形式が異なる、 System.Diagnostics用の定義済みリスナーがいくつか用意されています。 カスタム リスナーの種類を追加することもできます。
add
を使用して、使用するトレース リスナーの名前と種類を指定できます。 この構成例では、リスナー traceListener
という名前を付け、使用する型として標準の .NET Framework トレース リスナー (System.Diagnostics.XmlWriterTraceListener
) を追加しました。 ソースごとに任意の数のトレース リスナーを追加できます。 トレース リスナーがトレースをファイルに出力する場合は、構成ファイルの出力ファイルの場所と名前を指定する必要があります。 これを行うには、 initializeData
をそのリスナーのファイル名に設定します。 ファイル名を指定しない場合は、使用されるリスナーの種類に基づいてランダムなファイル名が生成されます。
XmlWriterTraceListenerを使用すると、拡張子のないファイル名が生成されます。 カスタム リスナーを実装する場合は、この属性を使用して、ファイル名以外の初期化データを受信することもできます。 たとえば、この属性のデータベース識別子を指定できます。
たとえば、ネットワーク上のトレースをリモート データベースに送信するようにカスタム トレース リスナーを構成できます。 アプリケーション 展開者は、リモート コンピューターのトレース ログに適切なアクセス制御を適用する必要があります。
トレース リスナーをプログラムで構成することもできます。 詳細については、「方法: トレース リスナーを作成および初期化する」および「カスタム TraceListener の作成」を参照してください。
注意事項
System.Diagnostics.XmlWriterTraceListener
はスレッド セーフではないため、トレースソースはトレースの出力時にリソースを排他的にロックする可能性があります。 多くのスレッドがこのリスナーを使用するように構成されたトレース ソースにトレースを出力すると、リソースの競合が発生し、パフォーマンスに重大な問題が発生する可能性があります。 この問題を解決するには、スレッド セーフなカスタム リスナーを実装する必要があります。
トレース レベル
トレース レベルは、トレース ソースの switchValue
設定によって制御されます。 使用可能なトレース レベルについては、次の表で説明します。
トレース レベル | 追跡対象イベントの性質 | 追跡対象イベントの内容 | 追跡対象イベント | ユーザー ターゲット |
---|---|---|---|---|
オフ | なし | なし | トレースは出力されません。 | なし |
危うい | "負の" イベント: 予期しない処理またはエラー状態を示すイベント。 | 次のような未処理の例外がログに記録されます。 - OutOfMemoryException - ThreadAbortException (CLR は ThreadAbortExceptionHandler を呼び出します) - StackOverflowException (キャッチできません) - ConfigurationErrorsException - SEHException - アプリケーションの開始エラー - Failfast イベント - システムハング - 有害メッセージ: アプリケーションが失敗する原因となるメッセージ トレース。 |
管理者 アプリケーション開発者 |
|
エラー | "負の" イベント: 予期しない処理またはエラー状態を示すイベント。 | 予期しない処理が発生しました。 アプリケーションが想定どおりにタスクを実行できませんでした。 ただし、アプリケーションはまだ稼働しています。 | すべての例外がログに記録されます。 | 管理者 アプリケーション開発者 |
Warnung | "負の" イベント: 予期しない処理またはエラー状態を示すイベント。 | 考えられる問題が発生したか、または発生する可能性がありますが、アプリケーションは正常に機能します。 ただし、引き続き正常に動作しない可能性があります。 | - アプリケーションが受信する要求の数が、調整設定で許可されている数を超えています。 - 受信キューは、構成された最大容量に近い。 - タイムアウトを超えました。 - 資格情報は拒否されます。 |
管理者 アプリケーション開発者 |
情報 | "肯定的な" イベント: 成功したマイルストーンをマークするイベント | アプリケーションが正常に動作しているかどうかに関係なく、アプリケーション実行の重要で成功したマイルストーン。 | 一般に、システムの状態の監視と診断、パフォーマンスの測定、またはプロファイリングに役立つメッセージが生成されます。 容量計画とパフォーマンス管理には、次の情報を使用できます。 - チャネルが作成されます。 - エンドポイント リスナーが作成されます。 - メッセージの入退出トランスポート。 - セキュリティ トークンが取得されます。 - 構成設定が読み取られます。 |
管理者 アプリケーション開発者 製品開発者。 |
詳細 | "肯定的な" イベント: 成功したマイルストーンをマークするイベント。 | ユーザー コードとサービスの両方の低レベルのイベントが生成されます。 | 一般に、このレベルはデバッグやアプリケーションの最適化に使用できます。 - メッセージ ヘッダーを理解しました。 |
管理者 アプリケーション開発者 製品開発者。 |
ActivityTracing | 処理アクティビティとコンポーネント間のフロー イベント。 | このレベルでは、管理者と開発者は、同じアプリケーション ドメイン内のアプリケーションを関連付けることができます。 - 開始/停止などのアクティビティ境界のトレース。 - 転送のトレース。 |
全て | |
全て | アプリケーションが正常に機能する可能性があります。 すべてのイベントが生成されます。 | 以前のすべてのイベント。 | 全て |
詳細レベルから重大レベルまでのレベルは、互いに積み重ねられます。つまり、各トレース レベルには、オフ レベルを除く、その上のすべてのレベルが含まれます。 たとえば、警告レベルでリッスンしているリスナーは、重大トレース、エラー トレース、および警告トレースを受け取ります。 All レベルには、Verbose から Critical、Activity のトレース イベントまでのイベントが含まれます。
注意事項
Information、Verbose、ActivityTracing の各レベルでは多くのトレースが生成されるため、コンピューターで使用可能なすべてのリソースを使い切った場合、メッセージのスループットに悪影響を及ぼす可能性があります。
相関のためのアクティビティ トレースと伝達の構成
switchValue
属性に指定されたactivityTracing
値は、アクティビティの境界のトレースを出力し、エンドポイント内で転送するアクティビティ トレースを有効にするために使用されます。
注
WCF で特定の機能拡張機能を使用すると、アクティビティ トレースが有効になっているときに NullReferenceException が得られる場合があります。 この問題を解決するには、アプリケーションの構成ファイルを確認し、トレース ソースの switchValue
属性が activityTracing
に設定されていないことを確認します。
propagateActivity
属性は、メッセージ交換に参加する他のエンドポイントにアクティビティを伝達する必要があるかどうかを示します。 この値を true
に設定すると、任意の 2 つのエンドポイントによって生成されたトレース ファイルを取得し、1 つのエンドポイント上のトレースのセットが別のエンドポイント上のトレースのセットにどのように流れたかを観察できます。
アクティビティのトレースと伝達の詳細については、「 伝達」を参照してください。
propagateActivity
とActivityTracing
の両方のブール値は、System.ServiceModel TraceSource に適用されます。
ActivityTracing
の値は、WCF やユーザー定義のトレース ソースを含む任意のトレース ソースにも適用されます。
propagateActivity
属性は、ユーザー定義のトレース ソースでは使用できません。 ユーザー コード アクティビティ ID 伝達の場合は、ServiceModel ActivityTracing
を設定しないで、ServiceModel propagateActivity
属性を true
に設定します。