[ASP.NET] ASPX で例外を検出する方法

この記事は3年以上前に書かれた記事です。情報が古い可能性があります。

ASPX で例外処理をするには、 Global.aspx にエラー発生時のハンドラを記述すれば良い。

<%@ Import Namespace="System.IO" %>
<script Language="C#" runat="Server">
void Application_OnError(Object sender, EventArgs e)
{
    // ここでログに書くなどする。
    Exception err = Server.GetLastError().InnerException;
    logger.Error( "エラー発生。", err );
}
</script>

スクリプトではなく、コードに書く場合は、

<%@ Application Codebehind="Global.asax.cs" Inherits="Sample.Global"%>

として、Global.asax.cs に

using System;
using System.Diagnostics;

namespace Sample 
{
    public class Global : System.Web.HttpApplication
    {
        public Global()
        {
            InitializeComponent();
        }

        protected void Application_Error(Object sender, EventArgs e)
        {
            //    ここでログに書くなどする。
            Exception err = Server.GetLastError().GetBaseException();
            logger.Error( "エラー発生。", err );
        }
    }
}

などと書く。

Global.asax は、ASP.NET のルートに置く。

※ちなみに、上の logger は log4net なんか使えるかと。

コードでは次のイベントも拾うことができる。

イベントハンドラタイミング
Application_Startアプリケーションの初回起動時。
Application_Endアプリケーションが破棄された時。
Session_Startユーザーセッションの初回起動時。
Session_Endユーザーセッションの終了時。
Application_BeginRequestGETやPOSTなどのリクエスト発生時。
Application_EndRequestGETやPOSTなどのリクエスト終了時。
Application_DisposedCLRがASP.NETアプリケーションを最終的にメモリから破棄するタイミング。
Application_Errorアプリケーション内で処理されない例外が発生した時。

【参考】[ASP.NET]アプリケーション内で発生したエラー情報をロギングするには?

タイトルとURLをコピーしました