トレースの構成Configuring Tracing

ここでは、トレースを有効にする方法、トレースを出力し、トレース レベルを設定するようにトレース ソースを構成する方法、エンドツーエンドのトレース相関をサポートするようにアクティビティ トレースと伝達を設定する方法、およびトレースにアクセスするようにトレース リスナーを設定する方法について説明します。This topic describes how you can enable tracing, configure trace sources to emit traces and set trace levels, set activity tracing and propagation to support end-to-end trace correlation, and set trace listeners to access traces.

運用環境またはデバッグ環境でのトレース設定の推奨事項を参照してくださいトレースとメッセージ ログの推奨設定します。For tracing settings recommendations in production or debugging environment, refer to Recommended Settings for Tracing and Message Logging.

重要

Windows 8 でアプリケーションによるトレース ログの生成を行うには、アプリケーションを権限の高い状態で実行 (管理者として実行) する必要があります。On Windows 8 you must run your application elevated (Run as Administrator) in order for your application to generate trace logs.

トレースの有効化Enabling Tracing

Windows Communication Foundation (WCF) は、次のデータの診断トレースを出力します。Windows Communication Foundation (WCF) outputs the following data for diagnostic tracing:

  • 操作呼び出し、コード例外、警告、その他の重要な処理イベントなど、アプリケーションのすべてのコンポーネントにおける処理マイルストーンのトレース。Traces for process milestones across all components of the applications, such as operation calls, code exceptions, warnings and other significant processing events.

  • トレース機能が正しく動作しないときの Windows エラー イベント。Windows error events when the tracing feature malfunctions. 参照してくださいイベントのログ記録します。See Event Logging.

WCF トレースがの上に構築されたSystem.Diagnosticsします。WCF tracing is built on top of System.Diagnostics. トレースを使用するには、構成ファイルまたはコードでトレース ソースを定義する必要があります。To use tracing, you should define trace sources in the configuration file or in code. WCF では、WCF アセンブリごとにトレース ソースを定義します。WCF defines a trace source for each WCF assembly. System.ServiceModelトレース ソースは、最も一般的な WCF トレース ソースし、WCF 通信スタックの出入りユーザー コードへの出入りのトランスポートからの間でマイルス トーンの処理を記録します。The System.ServiceModel trace source is the most general WCF trace source, and records processing milestones across the WCF communication stack, from entering/leaving transport to entering/leaving user code. System.ServiceModel.MessageLogging トレース ソースは、システムを通過するすべてのメッセージを記録します。The System.ServiceModel.MessageLogging trace source records all messages that flow through the system.

既定では、トレースは無効です。Tracing is not enabled by default. トレースを有効にするには必要があります、トレース リスナーを作成し、構成; で、選択したトレース ソースの"Off"以外のトレース レベルを設定それ以外の場合、WCF では、トレースを生成しません。To activate tracing, you must create a trace listener and set a trace level other than "Off" for the selected trace source in configuration; otherwise, WCF does not generate any traces. リスナーを指定しないと、トレースは自動的に無効になります。If you do not specify a listener, tracing is automatically disabled. リスナーを定義してもトレース レベルを指定しないと、トレース レベルは既定で "Off" に設定され、トレースが出力されなくなります。If a listener is defined, but no level is specified, the level is set to "Off" by default, which means that no trace is emitted.

カスタム操作の呼び出し元などの WCF 機能拡張ポイントを使用する場合は、独自のトレースを出力する必要があります。If you use WCF extensibility points such as custom operation invokers, you should emit your own traces. これは、ため、WCF は既定のパスに標準のトレースを出力できなく機能拡張ポイントを実装する場合です。This is because if you implement an extensibility point, WCF can no longer emit the standard traces in the default path. トレースを出力することで手動トレースのサポートを実装しない場合、予測したトレースが得られない場合があります。If you do not implement manual tracing support by emitting traces, you may not see the traces you expect.

トレースは、アプリケーションの構成ファイル (Web ホスト型アプリケーションの場合は Web.config、自己ホスト型アプリケーションの場合は Appname.exe.config) を編集することで構成できます。You can configure tracing by editing the application’s configuration file—either Web.config for Web-hosted applications, or Appname.exe.config for self-hosted applications. 以下は、このような編集の例です。The following is an example of such edit. これらの設定の詳細については、「を構成するトレース リスナー トレースを使用」セクションを参照してください。For more information on these settings, see the "Configuring Trace Listeners to Consume Traces" section.

<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 でホストされるアプリケーションでは、appname.exe.config で自己ホスト型アプリケーションの Web.configソリューション エクスプ ローラー.To edit the configuration file of a WCF service project in Visual Studio, right click the application’s configuration file—either Web.config for Web-hosted applications, or Appname.exe.config for self-hosted application in Solution Explorer. 選択し、 WCF 構成の編集コンテキスト メニュー項目。Then choose the Edit WCF Configuration context menu item. これにより、起動、構成エディター ツール (SvcConfigEditor.exe)、グラフィカル ユーザー インターフェイスを使用して WCF サービスの構成設定を変更できます。This launches the Configuration Editor Tool (SvcConfigEditor.exe), which enables you to modify configuration settings for WCF services using a graphical user interface.

トレースを出力するためのトレース ソースの構成Configuring Trace Sources to Emit Traces

WCF では、各アセンブリのトレース ソースを定義します。WCF defines a trace source for each assembly. アセンブリ内で生成されたトレースは、該当するソースで定義されているリスナーによってアクセスされます。Traces generated within an assembly are accessed by the listeners defined for that source. 次のトレース ソースが定義されます。The following trace sources are defined:

  • System.ServiceModel:WCF 処理されるたびのすべての段階のログ構成を読み取り、トランスポートでメッセージの処理、ユーザー コードでセキュリティ処理、メッセージがディスパッチされます。System.ServiceModel: Logs all stages of WCF processing, whenever configuration is read, a message is processed in transport, security processing, a message is dispatched in user code, and so on.

  • System.servicemodel.messagelogging:システムを通過するすべてのメッセージを記録します。System.ServiceModel.MessageLogging: Logs all messages that flow through the system.

  • System.IdentityModelSystem.IdentityModel.

  • System.ServiceModel.ActivationSystem.ServiceModel.Activation.

  • System.IO.Log:.NET Framework インターフェイスを Common Log File System (CLFS) ログを記録します。System.IO.Log: Logging for the .NET Framework interface to the Common Log File System (CLFS).

  • System.Runtime.Serialization:ログ オブジェクトの読み取りまたは書き込み時にします。System.Runtime.Serialization: Logs when objects are read or written.

  • CardSpaceCardSpace.

各トレース ソースは、次の構成例に示すように同じ (共有) リスナーを使用するように構成できます。You can configure each trace source to use the same (shared) listener, as indicated in the following configuration example.

<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>  

さらに、次の例に示すように、ユーザー定義のトレース ソースを追加してユーザー コード トレースを出力することもできます。In addition, you can add user-defined trace sources, as demonstrated by the following example, to emit user code traces.

<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>  

ユーザー定義のトレース ソースを作成する方法の詳細については、次を参照してください。トレース拡張します。For more information about creating user-defined trace sources, see Extending Tracing.

トレースを使用するためのトレース リスナーの構成Configuring Trace Listeners to Consume Traces

実行時に、WCF は、データを処理するリスナーをトレース データをフィードします。At runtime, WCF feeds trace data to the listeners which process the data. WCF は、いくつかの定義済みリスナーをSystem.Diagnostics出力の形式が異なります。WCF provides several predefined listeners for System.Diagnostics, which differ in the format they use for output. カスタム リスナーの種類を追加することもできます。You can also add custom listener types.

add を使用して、使用するトレース リスナーの名前と種類を指定できます。You can use add to specify the name and type of the trace listener you want to use. この例の構成では、リスナーに traceListener という名前を付け、使用する種類として標準の .NET Framework トレース リスナー (System.Diagnostics.XmlWriterTraceListener) を追加しています。In our example configuration, we named the Listener traceListener and added the standard .NET Framework trace listener (System.Diagnostics.XmlWriterTraceListener) as the type we want to use. ソースごとに任意の数のトレース リスナーを追加できます。You can add any number of trace listeners for each source. トレース リスナーがトレースをファイルに出力する場合は、構成ファイルで出力ファイルの場所と名前を指定する必要があります。If the trace listener emits the trace to a file, you must specify the output file location and name in the configuration file. 指定するには、initializeData をそのリスナーのファイルの名前に設定します。This is done by setting initializeData to the name of the file for that listener. ファイル名を指定しないと、使用するリスナーの種類に基づいて任意のファイル名が生成されます。If you do not specify a file name, a random file name is generated based on the listener type used. XmlWriterTraceListener を使用した場合は、拡張子のないファイル名が生成されます。If XmlWriterTraceListener is used, a file name with no extension is generated. カスタム リスナーを実装した場合は、この属性を使用して、ファイル名以外の初期化データを受け取ることもできます。If you implement a custom listener, you can also use this attribute to receive initialization data other than a filename. たとえば、この属性にデータベース識別子を指定できます。For example, you can specify a database identifier for this attribute.

カスタム トレース リスナーは、ネットワーク上のリモート データベースなどにトレースを送信するように構成できます。You can configure a custom trace listener to send traces on the wire, for example, to a remote database. アプリケーションを展開するユーザーは、リモート コンピューターのトレース ログに適切なアクセス制御を適用する必要があります。As an application deployer, you should enforce proper access control on the trace logs in the remote machine.

また、トレース リスナーはプログラムによって構成することもできます。You can also configure a trace listener programmatically. 詳細については、「方法 :作成し、トレース リスナーを初期化カスタム TraceListener の作成です。For more information, see How to: Create and Initialize Trace Listeners and Creating a Custom TraceListener.

注意事項

System.Diagnostics.XmlWriterTraceListener はスレッド セーフではないため、トレース ソースは、トレースを出力するときにリソースを排他的にロックする可能性があります。Because System.Diagnostics.XmlWriterTraceListener is not thread-safe, the trace source may lock resources exclusively when outputting traces. このリスナーを使用するように構成されたトレース ソースに多くのスレッドがトレースを出力すると、リソースの競合が発生し、パフォーマンスに重大な問題が生じる場合があります。When many threads output traces to a trace source configured to use this listener, resource contention may occur, which results in a significant performance issue. この問題を解決するには、スレッド セーフなカスタム リスナーを実装する必要があります。To resolve this problem, you should implement a custom listener that is thread-safe.

トレース レベルTrace Level

トレース レベルは、トレース ソースの switchValue 設定で制御します。The tracing level is controlled by the switchValue setting of the trace source. 使用できるトレース レベルを次の表に示します。The available tracing levels are described in the following table.

トレース レベルTrace Level 追跡イベントの性質Nature of the Tracked Events 追跡イベントの内容Content of the Tracked Events 追跡イベントTracked Events 対象ユーザーUser Target
オフOff N/AN/A N/AN/A トレースは出力されません。No traces are emitted. N/AN/A
重大Critical 「否定的」イベント: 予期しない処理をまたはエラー状態を示すイベント。"Negative" events: events that indicate an unexpected processing or an error condition. 次の例を含む未処理の例外が記録されます。Unhandled exceptions including the following are logged:

- OutOfMemoryException- OutOfMemoryException
-ThreadAbortException (CLR が任意の threadabortexceptionhandler を呼び出します)- ThreadAbortException (the CLR invokes any ThreadAbortExceptionHandler)
-StackOverflowException (キャッチできません)- StackOverflowException (cannot be caught)
-ConfigurationErrorsException- ConfigurationErrorsException
-SEHException- SEHException
-アプリケーションの起動エラー- Application start errors
-フェイルファースト イベント- Failfast events
システムがハングします。- System hangs
有害メッセージ: アプリケーションにエラーが発生しているトレースのメッセージします。- Poison messages: message traces that cause the application to fail.
管理者Administrators

アプリケーション開発者Application developers
ErrorError 「否定的」イベント: 予期しない処理をまたはエラー状態を示すイベント。"Negative" events: events that indicate an unexpected processing or an error condition. 予期しない処理が発生した。Unexpected processing has happened. アプリケーションが、タスクを正常に実行できなかった。The application was not able to perform a task as expected. ただし、アプリケーションは依然として動作している。However, the application is still up and running. すべての例外がログに記録されます。All exceptions are logged. 管理者Administrators

アプリケーション開発者Application developers
警告Warning 「否定的」イベント: 予期しない処理をまたはエラー状態を示すイベント。"Negative" events: events that indicate an unexpected processing or an error condition. 問題が発生したか、発生する可能性があるが、アプリケーションは正常に動作している。A possible problem has occurred or may occur, but the application still functions correctly. ただし、正常な動作を継続できなくなる可能性がある。However, it may not continue to work properly. -アプリケーションが、調整設定よりもより多くの要求を受信します。- The application is receiving more requests than its throttling settings allow.
-受信キューでは、構成済みの最大容量近くです。- The receiving queue is near its maximum configured capacity.
タイムアウトを超えました。- Timeout has exceeded.
-資格情報は拒否されます。- Credentials are rejected.
管理者Administrators

アプリケーション開発者Application developers
情報Information 「肯定的」イベント: 正常なマイルス トーン イベント"Positive" events: events that mark successful milestones アプリケーションが正常に動作しているかどうかとは無関係の、アプリケーションの実行に関する重要で正常なマイルストーン。Important and successful milestones of application execution, regardless of whether the application is working properly or not. 一般に、システム ステータスの監視と診断、パフォーマンスの計測、またはプロファイリングに有用なメッセージが生成されます。In general, messages helpful for monitoring and diagnosing system status, measuring performance or profiling are generated. この情報は、キャパシティ プランニングやパフォーマンス管理のために利用できます。You can use such information for capacity planning and performance management:

チャネルが作成されます。- Channels are created.
エンドポイントのリスナーが作成されます。- Endpoint listeners are created.
メッセージを入力またはトランスポートから離れる。- Message enters/leaves transport.
セキュリティ トークンを取得します。- Security token is retrieved.
構成の設定は読み取り専用です。- Configuration setting is read.
管理者Administrators

アプリケーション開発者Application developers

製品開発者。Product developers.
詳細Verbose 「肯定的」イベント: 正常なマイルス トーン イベント。"Positive" events: events that mark successful milestones. ユーザー コードとサービスの両方に対する低レベルのイベントが出力されます。Low level events for both user code and servicing are emitted. 一般に、このレベルはデバッグやアプリケーションの最適化に利用できます。In general, you can use this level for debugging or application optimization.

-認識されたメッセージのヘッダー。- Understood message header.
管理者Administrators

アプリケーション開発者Application developers

製品開発者。Product developers.
ActivityTracingActivityTracing 処理アクティビティとコンポーネント間のフロー イベント。Flow events between processing activities and components. このレベルを使用すると、管理者と開発者は同じアプリケーション ドメイン内のアプリケーションの相関関係を示すことができます。This level allows administrators and developers to correlate applications in the same application domain:

-開始/停止などのアクティビティの境界のトレース。- Traces for activity boundaries, such as start/stop.
-転送のトレース。- Traces for transfers.
すべてAll
すべてAll アプリケーションが正常に動作している可能性があります。Application may function properly. すべてのイベントが出力されます。All events are emitted. 前のすべてのイベント。All previous events. すべてAll

Verbose から Critical までのレベルは相互にスタックされます。つまり、各トレース レベルには、そのレベルよりも上位のすべてのレベルが含まれます (Off レベルを除く)。The levels from Verbose to Critical are stacked on top of each other, that is, each trace level includes all levels above it except the Off level. たとえば、Warning レベルでリッスンしているリスナーは、Critical、Error、Warning の各トレースを受け取ります。For example, a listener listening at the Warning level receives Critical, Error, and Warning traces. All レベルには、Verbose から Critical までのイベントとアクティビティ トレース イベントが含まれます。The All level includes events from Verbose to Critical and Activity tracing events.

注意事項

Information、Verbose、および ActivityTracing の各レベルは、多くのトレースを生成するため、コンピューターで利用可能なすべてのリソースを使い果たした場合は、メッセージ スループットに悪影響を及ぼす可能性があります。The Information, Verbose, and ActivityTracing levels generate a lot of traces, which may negatively impact message throughput if you have used up all available resources on the machine.

アクティビティ トレースと伝達の関連付けの構成Configuring Activity Tracing and Propagation for Correlation

activityTracing 属性に指定する switchValue 値を使用してアクティビティ トレースを有効にし、エンドポイント内のアクティビティの境界と転送のトレースを出力できます。The activityTracing value specified for the switchValue attribute is used to enable activity tracing, which emits traces for activity boundaries and transfers within endpoints.

注意

WCF で特定の拡張機能を使用するときに、NullReferenceExceptionアクティビティ トレースが有効になっています。When you use certain extensibility features in WCF, you might get a NullReferenceException when activity tracing is enabled. この問題を解決するには、アプリケーションの構成ファイルを調べて、トレース ソースの switchValue 属性が activityTracing に設定されていないことを確認します。To fix this problem, check your application's configuration file and ensure that the switchValue attribute for your trace source is not set to activityTracing.

propagateActivity 属性は、メッセージ交換に参加している他のエンドポイントにアクティビティを伝達する必要があるかどうかを示します。The propagateActivity attribute indicates whether the activity should be propagated to other endpoints that participate in the message exchange. この値を true に設定すると、任意の 2 つのエンドポイントで生成されたトレース ファイルを取得し、一方のエンドポイントのトレース セットがもう一方のエンドポイントのトレース セットにどのように転送されるかを監視できます。By setting this value to true, you can take trace files generated by any two endpoints and observe how a set of traces on one endpoint flowed to a set of traces on another endpoint.

アクティビティ トレースと伝達の詳細については、次を参照してください。伝達します。For more information about activity tracing and propagation, see Propagation.

両方propagateActivityActivityTracingブール値 System.ServiceModel TraceSource に適用されます。Both propagateActivity and ActivityTracing Boolean values apply to the System.ServiceModel TraceSource. ActivityTracing値は、WCF またはユーザー定義のものを含む、任意のトレース ソースにも適用されます。The ActivityTracing value also applies to any trace source, including WCF or user-defined ones.

ユーザー定義のトレース ソースでは、propagateActivity 属性を使用できません。You cannot use the propagateActivity attribute with user-defined trace sources. ユーザー コード アクティビティ ID の伝達では、ServiceModel ActivityTracing 属性を propagateActivity に設定しているときは、ServiceModel true を設定しないでください。For user code activity ID propagation, make sure you do not set ServiceModel ActivityTracing, while still having ServiceModel propagateActivity attribute set to true.

関連項目See also