ASP.NET 開発メモ †ASP.NET で 例外を検出する方法 †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 なんか使えるかと。 コードでは次のイベントも拾うことができる。
参考 †HTTP サーバのイベントをログに残す方法 †IHttpModule? インタフェースを持つモジュールクラスを作れば良い。 using System; using System.Web; namespace Sample { public class HttpLoggerModule : IHttpModule { public HttpLoggerModule() : base() { } public void Init(HttpApplication application) { // TODO: ここで取得したいイベントハンドラを追加する。 application.BeginRequest += (new EventHandler(this.Application_BeginRequest)); application.EndRequest += (new EventHandler(this.Application_EndRequest)); } public void Dispose() { // TODO: リソースの解放処理。 } private void Application_BeginRequest(Object sender , EventArgs e) { HttpContext context = ((HttpApplication)sender).Context; logger.Debug( "-- BeginRequest" ); logger.Debug( String.Format( @"URL: ""{0}""", context.Request.Url.ToString() ) ); } private void Application_EndRequest(object sender, EventArgs e) { logger.Debug( "-- EndRequest" ); } } } 上のようなクラスをつくったら、.NET クラスライブラリとしてコンパイル。 HttpLoggerModule?.dll というようなバイナリファイルができるので、 これを使うアプリケーションのプロジェクトで、参照設定に追加する。 あとは、そのアプリケーションの web.config に、このモジュールを使うぞ、という設定をする。 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <httpModules> <add name="HttpLoggerModule" type="Sample.HttpLoggerModule, HttpLoggerModule" /> </httpModules> </system.web> </configuration> 参考 † |