Global.asaxファイル
Global.asaxファイルをアプリケーション・ルート直下に追加します。Application_Errorイベントにハンドルされなかった例外を処理するコードを記述します。
<%@ Application Language="VB" %> <script runat="server"> Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' アプリケーションのスタートアップで実行するコードです End Sub Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) ' アプリケーションのシャットダウンで実行するコードです End Sub Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) ' ハンドルされていないエラーが発生したときに実行するコードです 'ログを出力します。 Using writer As New System.IO.StreamWriter(Server.MapPath("~/MyError.log"), True) Dim err As Exception = Server.GetLastError.InnerException If err IsNot Nothing Then Dim text As New System.Text.StringBuilder text.Append(err.Source & Chr(13)) text.Append(err.Message & Chr(13)) text.Append(DateTime.Now.ToString & Chr(13)) writer.WriteLine(text.ToString) End If End Using 'カスタムエラーページを表示します。 Server.Transfer("~/MyError.aspx") End Sub Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) ' 新規セッションを開始したときに実行するコードです End Sub Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) ' セッションが終了したときに実行するコードです ' メモ: Session_End イベントは、Web.config ファイル内で sessionstate モードが ' InProc に設定されているときのみ発生します。session モードが StateServer か、または ' SQLServer に設定されている場合、イベントは発生しません。 End Sub </script>
カスタムエラーページを作成
ルート直下にMyError.aspxフォームを追加します。今回はラベルを2つ配置し、Loadイベントで例外情報を出すようにしてみます。
Partial Class MyError Inherits System.Web.UI.Page Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load Dim ex As Exception ex = Server.GetLastError If TypeOf ex Is HttpUnhandledException AndAlso ex.InnerException IsNot Nothing Then ex = ex.InnerException End If Me.Label1.Text = ex.GetType.ToString Me.Label2.Text = ex.Message End Sub End Class
0 件のコメント:
コメントを投稿