この記事は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_BeginRequest | GETやPOSTなどのリクエスト発生時。 |
Application_EndRequest | GETやPOSTなどのリクエスト終了時。 |
Application_Disposed | CLRがASP.NETアプリケーションを最終的にメモリから破棄するタイミング。 |
Application_Error | アプリケーション内で処理されない例外が発生した時。 |