[解決済み] ASP.NET MVCにおけるエラーのログ記録
質問
現在、ASP.NET MVCアプリケーションでlog4netを使用して、例外のログを記録しています。 これを行う方法は、すべてのコントローラを BaseController クラスから継承させることです。 BaseControllerのOnActionExecutingイベントで、発生した可能性のあるすべての例外を記録しています。
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Log any exceptions
ILog log = LogManager.GetLogger(filterContext.Controller.GetType());
if (filterContext.Exception != null)
{
log.Error("Unhandled exception: " + filterContext.Exception.Message +
". Stack trace: " + filterContext.Exception.StackTrace,
filterContext.Exception);
}
}
これは、コントローラのアクション中に処理されない例外が発生した場合に、非常に有効です。
404エラーに関しては、web.configに以下のようなカスタムエラーを設定しています。
<customErrors mode="On">
<error statusCode="404" redirect="~/page-not-found"/>
</customErrors>
そして、"page-not-found" urlを処理するコントローラアクションでは、要求された元のurlを記録しています。
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult PageNotFound()
{
log.Warn("404 page not found - " + Utils.SafeString(Request.QueryString["aspxerrorpath"]));
return View();
}
そして、これも動作します。
私が抱えている問題は、.aspx ページ自体にあるエラーをどのように記録するかということです。 例えば、ページの1つにコンパイルエラーがある、または例外を投げるいくつかのインラインコードがあるとします。
<% ThisIsNotAValidFunction(); %>
<% throw new Exception("help!"); %>
HandleError 属性は正しく Shared フォルダにある Error.aspx ページにリルートしているようですが、BaseController の OnActionExecuted メソッドでは確実に捕捉されません。 Error.aspx ページ自体にロギングコードを置くことができるかもしれないと考えていましたが、そのレベルでエラー情報を取得する方法がよくわかりません。
どのように解決するのですか?
Webアプリケーションをシンプルにするために、プラグインで エルマ .
Elmahのアセンブリをプロジェクトに追加し、web.configを設定します。コントローラやページレベルで発生した例外をログに記録します。様々な異なる場所(SQL Serverやメールなど)にログを記録するように設定することができます。また、Webフロントエンドを提供し、例外のログを参照することができます。
これは、私が作成するすべての asp.net mvc アプリに最初に追加するものです。
私はまだlog4netを使用していますが、デバッグや情報のログのために使用し、すべての例外はElmahに任せることが多いです。
また、より詳細な情報は、質問で紹介されている ASP.NETアプリのエラー(Exception)のログはどのように記録していますか? .
関連
-
[解決済み] PHPのエラーを表示させるにはどうしたらいいですか?
-
[解決済み] ファイルアップロード ASP.NET MVC 3.0
-
[解決済み] ASP.NET MVC Frameworkで複数のサブミットボタンを処理する方法は?
-
[解決済み] ASP.NET MVCでenumからドロップダウンリストを作成するにはどうすればよいですか?
-
[解決済み] ASP.NET MVC - カスタムIIdentityまたはIPrincipalの設定
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み] ASP.Net MVCのmodelStateからすべてのエラーを取得する方法は?
-
[解決済み】サービスは常にDTOを返すべきですか、それともドメインモデルも返すことができますか?
-
[解決済み】ASP.NET MVCのルートをサブドメインに基づいて作成することは可能ですか?
-
[解決済み] X-SourceFilesヘッダーは何をするものですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TextBoxFor()からは日付のみ。)
-
[解決済み】認証や認可に失敗した場合、AuthorizeAttributeがログインページにリダイレクトされるのはなぜですか?
-
[解決済み] [Solved] Replace line break characters with <br /> in ASP.NET MVC Razor view
-
[解決済み】MVC 4 Razor ファイルアップロード
-
[解決済み】MVC4 DataType.Date EditorForがChromeで日付の値を表示しない、Internet Explorerでは問題なし。
-
[解決済み] [Solved] ASP.NET MVCコントローラメソッドからJSON.NETでシリアライズされたcamelCase JSONを返すにはどうすればよいですか?
-
[解決済み】HTTPエラー500.19とエラーコード: 0x80070021
-
[解決済み] ASP.Net MVC デフォルトの HTTP ヘッダーを削除する方法は?
-
[解決済み] セキュリティ透過的なメソッド 'WebMatrix.WebData.PreApplicationStartCode.Start()' による試行。
-
[解決済み] ソートロジックは、モデル、ビュー、コントローラのいずれに配置するのがよいのでしょうか?[クローズド]