次の方法で共有


トレースの構成

ここでは、トレースを有効にする方法、トレースを出力し、トレース レベルを設定するようにトレース ソースを構成する方法、エンドツーエンドのトレース相関をサポートするようにアクティビティ トレースと伝達を設定する方法、およびトレースにアクセスするようにトレース リスナを設定する方法について説明します。

運用環境またはデバッグ環境でのトレースの推奨設定については、「トレースとメッセージ ログの推奨設定」を参照してください。

トレースの有効化

Windows Communication Foundation (WCF) では次の診断トレース データが出力されます。

  • 操作呼び出し、コード例外、警告、その他の重要な処理イベントなど、アプリケーションのすべてのコンポーネントにおける処理マイルストーンのトレース。
  • トレース機能が正しく動作しないときの Windows エラー イベント。「イベント ログ」を参照してください。

WCF トレースは、System.Diagnostics に基づいています。トレースを使用するには、構成ファイルまたはコードでトレース ソースを定義する必要があります。WCF では、WCF アセンブリごとにトレース ソースが定義されます。System.ServiceModel トレース ソースは最も一般的な WCF トレース ソースで、トランスポートへの出入りからユーザー コードへの出入りまで、WCF 通信スタック全体の処理マイルストーンを記録します。System.ServiceModel.MessageLogging トレース ソースは、システムを通過するすべてのメッセージを記録します。

既定では、トレースは無効です。トレースを有効にするには、トレース リスナを作成し、構成で選択したトレース ソースのトレース レベルを "Off" 以外に設定する必要があります。それ以外の場合、WCF はトレースを生成しません。リスナを指定しないと、トレースは自動的に無効になります。リスナを定義してもトレース レベルを指定しないと、トレース レベルは既定で "Off" に設定され、トレースが出力されなくなります。

トレースは、アプリケーションの構成ファイル (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>
ms733025.note(ja-jp,VS.90).gifメモ :
Visual Studio で WCF サービス プロジェクトの構成ファイルを編集するには、ソリューション エクスプローラで右クリックし、[WCF 構成の編集] コンテキスト メニュー項目を選択します。これによってConfiguration Editor Tool (SvcConfigEditor.exe) が開き、グラフィカル ユーザー インターフェイスを使用して WCF サービスの構成設定を変更できます。

トレースを出力するためのトレース ソースの構成

WCF は、アセンブリごとにトレース ソースを定義します。アセンブリ内で生成されたトレースは、該当するソースで定義されているリスナによってアクセスされます。次のトレース ソースが定義されます。

  • System.ServiceModel: 構成の読み取り、トランスポートでのメッセージの処理、セキュリティ処理、ユーザー コードでのメッセージのディスパッチなど、WCF 処理のすべての段階を記録します。
  • System.ServiceModel.MessageLogging: システムを通過するすべてのメッセージを記録します。
  • System.IdentityModel
  • System.ServiceModel.Activation
  • System.IO.Log: Common Log File System (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>

ユーザー定義のトレース ソースの作成詳細については、 、「Extending Tracing」を参照してください。

トレースを使用するためのトレース リスナの構成

実行時に、WCF はトレース データを処理するリスナにこのデータを送信します。WCF は、出力の形式が異なる複数の定義済みリスナを System.Diagnostics に提供します。カスタム リスナの種類を追加することもできます。

add を使用して、使用するトレース リスナの名前と種類を指定できます。この例の構成では、リスナに traceListener という名前を付け、使用する種類として標準の .NET Framework トレース リスナ (System.Diagnostics.XmlWriterTraceListener) を追加しています。ソースごとに任意の数のトレース リスナを追加できます。トレース リスナがトレースをファイルに出力する場合は、構成ファイルで出力ファイルの場所と名前を指定する必要があります。指定するには、initializeData をそのリスナのファイルの名前に設定します。ファイル名を指定しないと、使用するリスナの種類に基づいて任意のファイル名が生成されます。XmlWriterTraceListener を使用した場合は、拡張子のないファイル名が生成されます。カスタム リスナを実装した場合は、この属性を使用して、ファイル名以外の初期化データを受け取ることもできます。たとえば、この属性にデータベース識別子を指定できます。

カスタム トレース リスナは、ネットワーク上のリモート データベースなどにトレースを送信するように構成できます。アプリケーションを展開するユーザーは、リモート コンピュータのトレース ログに適切なアクセス制御を適用する必要があります。

また、トレース リスナはプログラムによって構成することもできます。詳細な情報については、次のページを参照してください。 「方法 : トレース リスナを作成し初期化する」および「カスタム TraceListener の作成」を参照してください。

ms733025.Caution(ja-jp,VS.90).gif注意 :
System.Diagnostics.XmlWriterTraceListener はスレッド セーフではないため、トレース ソースは、トレースを出力するときにリソースを排他的にロックする可能性があります。このリスナを使用するように構成されたトレース ソースに多くのスレッドがトレースを出力すると、リソースの競合が発生し、パフォーマンスに重大な問題が生じる場合があります。この問題を解決するには、スレッド セーフなカスタム リスナを実装する必要があります。

トレース レベル

トレース レベルは、トレース ソースの switchValue 設定で制御します。使用できるトレース レベルを次の表に示します。

トレース レベル 追跡イベントの性質 追跡イベントの内容 追跡イベント 対象ユーザー

Off

N/A

N/A

トレースは出力されません。

N/A

Critical

"否定的" イベント : 予期しない処理またはエラー状態を示すイベント。

次の例を含む未処理の例外が記録されます。

  • OutOfMemoryException
  • ThreadAbortException (CLR が任意の ThreadAbortExceptionHanler を呼び出します)
  • StackOverflowException (キャッチできません)
  • ConfigurationErrorsException
  • SEHException
  • アプリケーションの起動エラー
  • フェイルファースト イベント
  • システム ハング
  • 有害メッセージ : アプリケーションを失敗させるメッセージ トレース。

管理者

アプリケーション開発者

Error

"否定的" イベント : 予期しない処理またはエラー状態を示すイベント。

予期しない処理が発生した。アプリケーションが、タスクを正常に実行できなかった。ただし、アプリケーションは依然として動作している。

すべての例外がログに記録されます。

管理者

アプリケーション開発者

Warning

"否定的" イベント : 予期しない処理またはエラー状態を示すイベント。

問題が発生したか、発生する可能性があるが、アプリケーションは正常に動作している。ただし、正常な動作を継続できなくなる可能性がある。

  • アプリケーションが、調整設定の範囲を超えた数の要求を受信している。
  • 受信側キューが構成された最大の容量に近づいている。
  • タイムアウトを超えた。
  • 資格情報が拒否される。

管理者

アプリケーション開発者

Information

"肯定的" イベント : 正常なマイルストーンを示すイベント。

アプリケーションが正常に動作しているかどうかとは無関係の、アプリケーションの実行に関する重要で正常なマイルストーン。

一般に、システム ステータスの監視と診断、パフォーマンスの計測、またはプロファイリングに有用なメッセージが生成されます。この情報は、キャパシティ プランニングやパフォーマンス管理のために利用できます。

  • チャネルが作成される。
  • エンドポイントのリスナが作成される。
  • メッセージがトランスポートに入る、またはトランスポートから離れる。
  • セキュリティ トークンが取得される。
  • 構成設定が読み取られる。

管理者

アプリケーション開発者

製品開発者。

Verbose

"肯定的" イベント : 正常なマイルストーンを示すイベント。

ユーザー コードとサービスの両方に対する低レベルのイベントが出力されます。

一般に、このレベルはデバッグやアプリケーションの最適化に利用できます。

  • 認識されたメッセージ ヘッダー。

管理者

アプリケーション開発者

製品開発者。

ActivityTracing

処理アクティビティとコンポーネント間のフロー イベント。

このレベルを使用すると、管理者と開発者は同じアプリケーション ドメイン内のアプリケーションの相関関係を示すことができます。

  • start/stop など、アクティビティ境界のトレース。
  • 転送のトレース。

すべて

All

アプリケーションが正常に動作している可能性があります。すべてのイベントが出力されます。

前のすべてのイベント。

All

Verbose から Critical までのレベルは相互にスタックされます。つまり、各トレース レベルには、そのレベルよりも上位のすべてのレベルが含まれます (Off レベルを除く)。たとえば、Warning レベルでリッスンしているリスナは、Critical、Error、Warning の各トレースを受け取ります。All レベルには、Verbose から Critical までのイベントとアクティビティ トレース イベントが含まれます。

ms733025.Caution(ja-jp,VS.90).gif注意 :
Information、Verbose、および ActivityTracing の各レベルは、多くのトレースを生成するため、コンピュータで利用可能なすべてのリソースを使い果たした場合は、メッセージ スループットに悪影響を及ぼす可能性があります。

アクティビティ トレースと伝達の関連付けの構成

switchValue 属性に指定する activityTracing 値を使用してアクティビティ トレースを有効にし、エンドポイント内のアクティビティの境界と転送のトレースを出力できます。

ms733025.note(ja-jp,VS.90).gifメモ :
WCF の特定の拡張機能を使用する場合に、アクティビティ トレースが有効になっていると、NullReferenceException が発生することがあります。この問題を解決するには、アプリケーションの構成ファイルを調べて、トレース ソースの switchValue 属性が activityTracing に設定されていないことを確認します。

propagateActivity 属性は、メッセージ交換に参加している他のエンドポイントにアクティビティを伝達する必要があるかどうかを示します。この値を true に設定すると、任意の 2 つのエンドポイントで生成されたトレース ファイルを取得し、一方のエンドポイントのトレース セットがもう一方のエンドポイントのトレース セットにどのように転送されるかを監視できます。

アクティビティのトレースと伝達詳細については、 、「エンドツーエンドのトレースの相関のためのアクティビティ トレースと伝達」を参照してください。

propagateActivity ブール値と ActivityTracing ブール値は共に System.ServiceModel TraceSource に適用されます。また、 ActivityTracing 値は、WCF またはユーザー定義トレース ソースを含む任意のトレース ソースに適用されます。

ユーザー定義のトレース ソースでは、propagateActivity 属性を使用できません。ユーザー コード アクティビティ ID の伝達では、ServiceModel propagateActivity 属性を true に設定しているときは、ServiceModel ActivityTracing を設定しないでください。

関連項目

概念

管理と診断

その他の技術情報

トレース
方法 : トレース リスナを作成し初期化する
カスタム TraceListener の作成