MSDN マガジン > Home > 発行物 > 2008 > April >  ツールボックス: Web アプリケーション エラーのログ記録、LINQ について、その他
ツールボックス
Web アプリケーション エラーのログ記録、LINQ について、その他
Scott Mitchell

Web アプリケーション エラーをログ記録する/確認する
理想の世界では、運用環境でエラーが発生することはないでしょう。データベースや Web サーバーは決してダウンしません。コードは、エラーを引き起こすようなあらゆる状況または入力を正常に処理するように、完璧にテストおよび設計されていることでしょう。実際にはそうはいきません。プログラミングの現場は現実の世界です。常に納期が存在し、機能の要求に終わりはありません、さらに、データベースや Web サーバーがオフライン状態に陥ることもあります。運用環境でエラーが発生した場合は、その詳細をログに記録し、開発チームに迅速に通知することが絶対的に求められます。
ASP.NET アプリケーションのエラーをログ記録するための一般的なソリューションとして、ASP.NET の状態監視システムと Atif Aziz のエラー ログのモジュールとハンドラ (ELMAH: Error Logging Modules and Handlers) の 2 つがあります。どちらのシステムを使用する場合でも、ページ開発者は、指定したログ ソースにエラーの詳細を記録するようにプログラミングできます。加えて、どちらのシステムも、ハンドルされていない例外を自動的にログに記録するためのメカニズムを備えています。
マイクロソフトの状態監視システムは、ASP.NET 2.0 で採用された堅牢で低レベルのフレームワークです。エラーの監視に加えて、アプリケーション ライフサイクル イベント (アプリケーションの起動、シャットダウンなど)、要求レベル イベント、およびセキュリティ関連のイベント (承認違反、成功および失敗したログイン試行など) を含むさまざまなメトリックスを記録することができます。
監視対象のイベントが発生した場合、そのイベントを任意の数の指定されたログ ソースに記録することができます。状態監視システムのログ機能は、プロバイダ モデルの上に構築されているので、開発者は、カスタム ログ プロバイダをプラグインとして利用したり、任意の組み込みプロバイダを使用したりできます。組み込みプロバイダの中には、イベントの詳細を Windows® イベント ログに記録するもの、イベントを SQL Server データベースに書き込むもの、詳細を電子メール アドレス宛てに送信するものがあります。
状態監視システムの使用を開始するには、適切な構成マークアップをアプリケーションの web.config ファイルに追加します。状態監視構成情報には、監視対象のイベント、ログ プロバイダ、および各監視対象イベントの記録方法が含まれている必要があります。
この基本情報に加え、構成マークアップは、ログをバッファ処理するかどうか、ログを開始するまでに発生する必要があるイベントの回数、特定のイベントを記録する最大回数 (それ以降のインスタンスは無視されます) などのオプションを含むことができます。
もう 1 つの一般的なログ オプションである ELMAH は、オープン ソースの HTTP ハンドラとモジュールのセットです。ASP.NET 状態監視システムがさまざまなイベントを監視できるのに対し、ELMAH は、アプリケーション エラーのみを記録するように設計されています。エラーが発生すると、ELMAH は、指定されたログ プロバイダに詳細を記録し、オプションで電子メールを構成可能な受信者のセット宛てに送信します。
ELMAH には、組み込みのログ プロバイダのほか、コミュニティによって作成されたログ プロバイダが多数あります。このようなログ プロバイダには、XML ファイル、SQL Server® データベース、Oracle データベース、および SQLite データベース (軽量のオープン ソース データベース エンジン) を記録先とするものがあります。
ELMAH は、いくつかの興味深い表示機能を備え、ASP.NET のすべてのバージョンをサポートしています。ASP.NET 状態監視システムがログに記録されたイベントを表示するための機能を備えていないのに対し、ELMAH には、エラー ログを Web ページから表示したり RSS フィードとして表示したりできる組み込み HTTP ハンドラが含まれています。また、状態監視システムが ASP.NET 2.0 以降のみに対応するのに対し、ELMAH は ASP.NET 1.0 以降に対応します。
私は、2006 年 8 月のツールボックスで初めて ELMAH を記事にしました (msdn.microsoft.com/msdnmag/issues/06/08/Toolbox を参照)。その後、Atif は、ELMAH を更新して、いくつかの新機能の追加およびパフォーマンス強化 (たとえば例外フィルタ) を行いました。
既に説明したように、ELMAH は既定ですべてのエラーを指定されたログ プロバイダに記録します。ただし、現在では、例外フィルタを使用することで、エラーを破棄する (したがってログに記録しない) 状況を指定できます。さらに、ELMAH の最新バージョンでは、エラー ログ全体を .csv ファイルとしてダウンロードできるようになり、サイズが大きなエラー ログのパフォーマンスも向上しています。
状態監視システムと ELMAH は、根本的には、ASP.NET アプリケーションのエラーを記録するための同じ機能を提供します。異なる種類のイベントを監視できるという理由で状態監視システムを好む開発者もいます。また、組み込みのエラー ログ表示機能や ASP.NET バージョン 1.x アプリケーションのサポートがあるという理由で ELMAH を好む開発者もいます。長い目で見れば、どちらのログ記録プラットフォームを選ぶかは重要ではありません。大切なのは、精密なエラー ログ システムを適切に配置して、避けられないアプリケーション エラーの詳細をすべて記録することです。
価格 : 無料
状態監視システム : go.microsoft.com/fwlink/?LinkId=109807
Error Log in ELMAH  (画像を拡大するには、ここをクリックします)

注目のブログ
最近の同僚との会話の中で、Jeff Atwood 氏のブログ「Coding Horror」にあった投稿について話題にしました。同僚はこのブログを知らず、どのような内容が書かれているブログなのか私にたずねてきました。私は、"コンピュータとプログラミング関連" について書かれているという答えを返すことしかできませんでした。
「Coding Horror」で扱われている内容は多岐にわたっているので、どのようなサイトであるかを説明するのは困難です。このブログには、非常に技術的な記事 (主に ASP.NET および Web 関連のテクノロジ) のほか、優秀なプログラマになるための提案や優れたプロジェクト管理上の決定を行うための提案が書かれています。さらに、各ブランドのマザーボード、マウス、モニタを比較して、コンピュータ ハードウェアを評価している記事もあります。消費者向けガジェットのユーザビリティやデザイン上の欠点、ダイエットやエクササイズのマニア向けの話題、ブログの将来、EULA の問題、DONKEY.BAS の歴史などの記事も登場します。
Jeff 氏は、間違いなく、業界のいくつかの重要な問題の核心に迫っています。ソフトウェアに関する高等教育の現状に対する彼の見解を読んでください。Jeff 氏が指摘しているように、Visual Studio® を使用しているときにどこをクリックするか、といったことから、チューリング マシンの理論まで、ソフトウェアの学習内容は多岐にわたります。では、ソフトウェアを作成する場合の最善のアプローチとは何でしょうか。その答えはここには書きません。ぜひ、Jeff 氏のブログを読んで、答えを見つけてください。
彼のブログは人気があります。75,000 人を超える読者が RSS フィードを購読しているので、山ほどのコメントが寄せられています。加えて、Jeff 氏は他の有名ブログ作成者へのリンクも提供しているので、意見をサンプリングする場所として非常に有用です。唯一のマイナス面は、大量のコンテンツ内を探索するためのツールがないことです。検索ボックスはありますが、カテゴリ別に記事が分類されてはいません。
Jeff Atwood's Blog, Coding Horror  (画像を拡大するには、ここをクリックします)

推薦図書
Microsoft® .NET Framework 3.5 における最も有用な技術革新の 1 つは LINQ です。簡単に説明すると、開発者は LINQ を使用することで、T-SQL の構文を忠実に反映しながら、任意のサポートされているデータ ソース (列挙可能なコレクション、XML ドキュメント、SQL Server データベースなど) を直接クエリするための C# コードおよび Visual Basic コードを記述できます。たとえば、次の C# コードは、ここに定義されている配列に偶数を出力します。
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var evens = from p in numbers
            where p % 2 == 0
            select p;

foreach (var e in evens)
    Console.WriteLine(e);
新しい言語構文と LINQ の豊富な機能および複雑さゆえに、私は、オンラインの記事やチュートリアルを探索するのに時間を費やすよりも、本を読んで LINQ について学習する方法を選びました。私が最初に選んだ LINQ 関連の本は、Joseph C. Rattz Jr. 氏によって書かれた『Pro LINQ in C# 2008』でした。
この本は、わかりやすく好奇心をそそられる LINQ の紹介から始まります。この部分では、コレクション、XML ファイル、および SQL Server データベースをクエリするための LINQ の使用法が解説されています。次に、LINQ を可能にしたラムダ式、匿名型、オブジェクト初期化、拡張メソッド、自動プロパティなどの新しい言語機能が簡単に説明されています。
この本の大部分は、LINQ to Objects、LINQ to XML、LINQ to DataSets、および LINQ to SQL を説明する 4 つのセクションに分けられます。各セクションでは、LINQ 構文と、LINQ を使ってこれらの異なるデータ ストアをクエリできるようにする各種のクラスおよびメソッドがていねいに解説されています。LINQ to Objects に関するセクションは、標準クエリ演算子のテクニカル リファレンスとして使用できます。演算子が列挙され、簡単な説明とプログラミング例が示されています。後続のセクションには、有用なヒント、よくある落とし穴、現実により即した例など、LINQ についてさらに有益な情報が含まれています。
最後の LINQ to SQL に関するセクションは、大多数の開発者にとっておそらく最も興味深く有用な章です。当然ながら、内容の 1/3 は LINQ to SQL の説明に費やされ、オブジェクト リレーショナル デザイナと SQLMetal.exe コマンド ライン ツールを使用して基底の SQL エンティティ クラスを作成するための手順が解説されています。これらのクラスを DataContext クラスと共に使用して、データのクエリ、更新、挿入、および削除を行う例も紹介されています。加えて、同時実行制御やトランザクションなどの、より複雑なデータベースの問題を扱う章もあります。
価格 : 44.99 ドル
  

ご意見やご質問は、Scott まで英語でお送りください。 toolsmm@microsoft.com.


Scott Mitchell は、多数の著書を出版し、4GuysFromRolla.com の創設者でもあります。また、1998 年からは Microsoft MVP としてマイクロソフトの Web テクノロジ開発に携わっています。現在は、フリーのコンサルタント、トレーナー、およびライターとして活躍しています。Scott の連絡先は、Mitchell@4guysfromrolla.com (英語) です。また、ScottOnWriting.NET にブログを公開しています。

Page view tracker