ASP.NETで最上位までいってもtry-catchで補足されない例外をログ出力するには、global.asaxを追加して、Application_Errorメソッドに出力処理を書く。
' global.asax
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' エラーの発生時に呼び出されます
SysErrLogWrite()
If TypeOf HttpContext.Current.Server.GetLastError() Is HttpRequestValidationException Then
HttpContext.Current.ClearError()
Response.Redirect("~/info_restricted_input.html") ' "<", ">" が使われていますエラーページ
End If
End Sub
Private Sub SysErrLogWrite()
Dim oContext As HttpContext = HttpContext.Current
Dim sLogFile As String =
' エラー内容を取得 ( Not Found の場合、ログ出力はしない )
Dim oErr As Exception = oContext.Server.GetLastError()
If TypeOf oErr Is HttpException AndAlso CType(oErr, HttpException).GetHttpCode() = 404 Then
Return
End If
' 取得されるエラーは HttpUnhandledException なので、実際に発生した内部エラーを取り出す
If oErr.InnerException IsNot Nothing Then oErr = oErr.InnerException
' 出力メッセージ作成
Dim sLogMsg As String = ""
sLogMsg &= "■ "
sLogMsg &= DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") ' 出力日時
sLogMsg &= " [URL] " & oContext.Request.Url.OriginalString ' URL
sLogMsg &= vbNewLine
sLogMsg &= oErr.ToString() & vbNewLine
sLogMsg &= "------------------------------------------------------------"
' ログファイル出力
Using oLogFile As New StreamWriter("C:\Log\SystemErr.log", True)
oLogFile.WriteLine(sLogMsg)
End Using
End Sub