IIS 7 トレースでの ASP.NET ページ トレース イベントのキャプチャ方法
公開日: 2007 年 12 月 5 日 (作業者: IIS チーム (英語))
更新日: 2008 年 2 月 26 日 (作業者: IIS チーム (英語))
はじめに
現在の ASP.NET では、開発者はページのスクリプト セクションで **Trace.Write() および **Trace.Warn() 呼び出しを使用して、トレース イベントを ASPX ページに追加できます。通常は、期待どおりに動作しないアプリケーションのデバッグにこれらのトレースを使用します。
これらのイベントは、ページのトレースを有効に設定した場合、つまり <%@ Page Trace="True" %> を設定した場合に表示されます。また、これらのイベントが表示されるのは、既定では、サーバー (Localhost など) からアプリケーションをブラウズした場合、または直近の一定のセッション数の間、アプリケーションのトレースを有効にした場合のみです。
ただし、この処理には以下のような問題があります。
- これらのトレースは永続的ではないので、プロセスが消えるとトレースも消える
- これらのトレースは要求の状態コードにかかわらず収集される (成功しても失敗してもトレースが取得される)
- これらのトレースは、IIS 7 または ASP.NET で提供されている他のインフラストラクチャ トレースとは完全に分けられて表示される
IIS 7 では、これらのトレースを通常の方法で表示する以外にも、失敗した要求トレースまたは ETW トレースで収集できるようになりました。また、これらのトレースを IIS および ASP.NET インフラストラクチャ トレースと併せて表示できます。
このチュートリアルでは、以下の作業を説明します。
- 失敗した要求トレースを構成し、ASP.NET ページの Trace.Write および Warn 呼び出しをキャプチャする
- 失敗状態を生成して、その結果生じたトレース キャプチャを表示し、Trace.Write および Trace.Warn 呼び出しを見つける
必要条件
以下のステップに、この記事の作業を完了するための必要条件を記載します。
ステップ 1: IIS 7 をインストールする
最初に IIS 7 をインストールする必要があります。IIS 7 がインストールされているかどうかを確認するには、https://localhost をブラウザーで表示します。構築中であることを示すページが表示された場合は、IIS 7 がインストールされています。IIS 7 がインストールされていない場合は、IIS 7 のインストールのためのガイドでインストール方法を参照してください。
以下の IIS 7 コンポーネントを必ずインストールします。
- ASP ([World Wide Web サービス]、[アプリケーション開発機能]、[ASP] の順に選択)
- トレース ([World Wide Web サービス]、[健全性と診断]、[追跡] の順に選択)
ステップ 2: 管理者としてログインする
管理者アカウントにログインするか、Administrators グループに参加します。
メモ: 管理者グループに参加しても、既定では、完全な管理者権限は付与されません。多くのアプリケーションを管理者として実行する必要があります。アプリケーションのアイコンを右クリックし、[管理者として実行] をクリックしてください。
ステップ 3: バックアップを作成する
この記事の作業を開始する前に、構成のバックアップを作成する必要があります。以下の手順を実行してください。
[スタート] ボタン -> [すべてのプログラム] -> [アクセサリ] -> [コマンド プロンプト] を右クリック -> [管理者として実行] をクリックします。
このコマンド プロンプトで、次のコマンドを実行します。
%windir%\system32\inetsrv\appcmd add backup
サンプル ASPX ページへの新しい Trace.Write() および Trace.Warn() 呼び出しの追加
この作業では、Trace.Write() および Warn() 呼び出しをサンプル aspx ページに追加し、その結果生じたトレースをブラウザーに表示します。
管理者のコマンド プロンプトを使用し、%systemdrive%\inetpub\wwwroot ディレクトリに移動します。
任意のエディターを使用し、trace.aspx という名前の aspx ページを作成して、そのページに次のコードを記述します。
<%@ Page language="C#" trace="true" %> <% Trace.Write("Hey, there"); Trace.Warn("Doh, a warning"); Response.Write("hello, world"); %>
https://localhost/trace.aspx をブラウザーで表示します。次のように表示されます。
上の図の "Hey, there" および "Doh, a warning" に注目してください。
これで、ページに新しいイベントが追加されました。次は、失敗した要求トレースでこれをキャプチャできるかどうかを確認します。
サンプル ASPX ページへの新しい Trace.Write() および Trace.Warn() 呼び出しの追加
ページには今、Trace.Write および Trace.Warn 呼び出しが備わっています。失敗した要求トレースを構成して、この ASPX ページの Trace.Write() および Trace.Warn() 呼び出しをキャプチャします。
このシナリオのために、ASP.NET プロバイダーの Page 領域を使用する必要があります。Trace.Write() 呼び出しは "詳細" 詳細レベルに該当し、Trace.Warn() は "警告" 詳細レベルに該当します。詳細レベルを "詳細" に設定すると両方が取得されます。
ステップ 1: サイトの失敗した要求トレースを有効にする
最初に、サイトの失敗した要求トレースを有効にする必要があります。有効化の手順は「方法: 失敗した要求トレース (HOWTO-FailureRequestTracing)」チュートリアルの作業 1 (Task 1) に記載されています。
ステップ 2: 失敗した要求トレースの規則を作成して Trace.Write() および Trace.Warn() イベントをキャプチャする
管理者のコマンド プロンプトで、「start inetmgr」と入力します。[接続] ウィンドウで、コンピューター名、サイトのフォルダーの順に展開し、[Default Web Site] をクリックします。[IIS] グループの [失敗した要求トレースの規則] をダブルクリックします。
[操作] ウィンドウの [追加] をクリックして、[失敗した要求トレース規則の追加] ウィザードを起動します。[トレースするコンテンツの指定] ページで、トレースする対象として [ASP.NET (*.aspx)] オプションをクリックし、[Next] をクリックします。
[トレース条件の定義] ページで、[状態コード] チェック ボックスをオンにし、トレースする状態コードとして「200」を入力します。
[次へ] をクリックします。[トレース プロバイダーの選択] ページが表示されます。[ASPNET] チェック ボックスをオンにし、[領域] ボックスの一覧の [Page] チェック ボックスをオンにして、[Page] 以外のすべての領域をオフにします。[詳細] ボックスの一覧で [詳細] をクリックします。
[終了] をクリックします。Default Web Site に次のように定義が表示されます。
ステップ 3: テストして表示する
このステップでは、https://localhost/trace.aspx に対する要求を生成してから、失敗した要求トレースのログ ファイルでトレース イベントを確認します。
以下の手順で検証します。
管理者に昇格して、新しい Internet Explorer ウィンドウを開きます。
アドレス「https://localhost/trace.aspx」をブラウザーに入力します。
トレースされる要求が生成されました。管理者に昇格して Internet Explorer ウィンドウを開き、ファイルを開くために CTRL+O を入力して、inetpub\logs\FailedReqLogFiles\W3SVC1 フォルダーに移動します。[HTML ファイル] の一覧で [すべてのファイル] をクリックします。
最新の FR######.xml ファイルを選択すると、次のように表示されます。
トレース内のイベントが表示されます。イベント "Doh, a warning" のサブタイプ名が "**AspNetPageTraceWarnEvent" であることに注目してください。これは Trace.Warn() イベントです。
すべての Trace.Write() 呼び出しは非常に高い詳細レベル (**詳細レベルが "詳細") なので、<Level>5</Level> であり、すべての Trace.Warn() 呼び出しは "警告" としてログに記録されます。
メモ: 他にも多くの **AspNetPageTraceWriteEvent イベントがログに記録されています。これは、トレース テーブル内の他の **Begin PreInit などのエントリすべてが、同じインフラストラクチャを通してログに記録されているからです。
まとめ
ASPX ページにトレース メッセージを追加しました。これらのトレースを有効化し、IIS 7 を構成して、失敗した要求トレース ログ ファイルにキャプチャしました。これらのトレース エントリは、ページに trace="true" ディレクティブが設定され、かつトレース (ETW または失敗した要求トレース) の際に Page 領域を持つ ASP.NET プロバイダーが定義されている場合にのみ、ログに記録されることに気を付けてください。