ELMAHをテストしていて、アプリケーションでELMAHログのデータベース接続を意図的にオフにして、DBが利用できない場合に本番環境で何が起こるかを確認しました。
ELMAHはそれ自体のエラーをトラップできないようです。SQLデータベースログに障害が発生すると、AXDファイルは使用できなくなります。
データベースが利用できない場合のELMAHの意図された動作は何ですか?
これが発生した場合、どうすればエラーを診断できますか?
ELMAHはそれ自体のエラーをトラップできないようです
ELMAHは、ある程度独自のエラーをトラップします。エラーをログに記録しようとしているときに例外が発生した場合、ErrorLogModule
ログに起因する例外が標準の.NETFrameworkトレース機能に送信されます。1.0ソースの123行目を参照してください。ASP.NETトレースで動作する標準の.NETFrameworkトレースを取得するには、ASP.NETドキュメントの次のウォークスルーも参照してください。
ウォークスルー:ASP.NETトレースとSystem.Diagnosticsトレースの統合
SQLデータベースログに障害が発生すると、AXDファイルは使用できなくなります。
それは正しいです。を使用するときにSQLServerデータベースに格納されているエラーを表示するには、SQLServerデータベース接続が機能している必要がありますSqlErrorLog
。
データベースが利用できない場合のELMAHの意図された動作は何ですか?
たとえば、SQL Serverデータベースがダウンしている場合、SqlException
ロギング中にaが発生します。ELMAHは、SqlException
オブジェクトのコンテンツを標準の.NETFrameworkトレース機能に送信します。
これが発生した場合、どうすればエラーを診断できますか?
ここでの最良のオプションは、エラーのログ記録と電子メール送信も有効にすることです。データベースがダウンしている場合は、メールゲートウェイがアップしている可能性が高く、エラーが通知されます。エラーは、事実上、一部のメールボックスに記録されます。これには、メールゲートウェイがダウンした場合にデータベースがアップし、エラーがログに記録される可能性があるという追加の利点もあります。ただし、両方がダウンしている場合は、本番インフラストラクチャを真剣に確認し、追加の手段によってシステムの状態を監視するための手段を講じる必要があります。
いつでもxmlファイルオプションを使用してエラーをログに記録できます。
ELMAHについてはよくわかりませんが、このようなロギングフレームワークの予想される動作は、問題が発生した場合に例外をスローしないことです。つまり、ELMAHのデータベースがダウンしている場合、エラーをデータベースに記録しないと思います。
上で提案したように、代替シンク(電子メールまたはフラットファイル)を使用できます/使用する必要があります。
コンテキストを少し混同していると思います。
データベースが利用できない場合のELMAHの動作は、データベースにエラーを記録しないことです。サーバーで例外がスローされた場合、またはを介してErrorSignal
例外を発生させた場合、ELMAHはその例外を黄色の画面またはカスタムエラーページ(設定)に通過させます。
Errors.axdページには、表示されているはずのユーザーのみがアクセスできるため(理想的には)、そのエラーをユーザーに表示しても問題ありません。
肝心なのは、エラーデータベースがダウンしていると、エラーを診断できないということです。私たちにとって、その場合、エラーデータベースは本番データベースと一緒にあるため、より大きな問題が発生します。