<% '======================================================================================================================= ' Error Handler Library ' Provides centralized error handling and logging functionality '======================================================================================================================= Class ErrorHandler_Class Private m_log_to_file Private m_log_file_path Private Sub Class_Initialize() m_log_to_file = False m_log_file_path = "" End Sub ' Configure whether to log errors to file Public Property Let LogToFile(value) m_log_to_file = value End Property Public Property Get LogToFile() LogToFile = m_log_to_file End Property ' Set the log file path Public Property Let LogFilePath(value) m_log_file_path = value End Property Public Property Get LogFilePath() LogFilePath = m_log_file_path End Property '--------------------------------------------------------------------------------------------------------------------- ' Main error handling method ' context: String describing where the error occurred ' errObj: VBScript Err object (optional, uses global Err if not provided) '--------------------------------------------------------------------------------------------------------------------- Public Sub HandleError(context, errObj) Dim isDevelopment isDevelopment = (LCase(GetAppSetting("Environment")) = "development") If IsEmpty(errObj) Or Not IsObject(errObj) Then ' Use global Err object if none provided If Err.Number <> 0 Then If isDevelopment Then ShowDetailedError context, Err Else ShowGenericError End If LogError context, Err End If Else If errObj.Number <> 0 Then If isDevelopment Then ShowDetailedError context, errObj Else ShowGenericError End If LogError context, errObj End If End If End Sub '--------------------------------------------------------------------------------------------------------------------- ' Display detailed error information (Development mode only) '--------------------------------------------------------------------------------------------------------------------- Private Sub ShowDetailedError(context, errObj) Dim errHtml errHtml = "
" errHtml = errHtml & "Error Occurred
" If Not IsEmpty(context) And Len(context) > 0 Then errHtml = errHtml & "Context: " & Server.HTMLEncode(context) & "
" End If errHtml = errHtml & "Time: " & Now() & "
" errHtml = errHtml & "Number: " & errObj.Number & "
" errHtml = errHtml & "Description: " & Server.HTMLEncode(errObj.Description) & "
" If Len(errObj.Source) > 0 Then errHtml = errHtml & "Source: " & Server.HTMLEncode(errObj.Source) & "
" End If errHtml = errHtml & "
" Response.Write errHtml End Sub '--------------------------------------------------------------------------------------------------------------------- ' Display generic error message (Production mode) '--------------------------------------------------------------------------------------------------------------------- Private Sub ShowGenericError() Dim errHtml errHtml = "
" errHtml = errHtml & "An error occurred
" errHtml = errHtml & "We apologize for the inconvenience. The error has been logged and will be investigated.
" errHtml = errHtml & "Please try again later or contact support if the problem persists." errHtml = errHtml & "
" Response.Write errHtml End Sub '--------------------------------------------------------------------------------------------------------------------- ' Log error to file (if enabled) '--------------------------------------------------------------------------------------------------------------------- Private Sub LogError(context, errObj) If Not m_log_to_file Or Len(m_log_file_path) = 0 Then Exit Sub On Error Resume Next Dim fso, logFile, logEntry Set fso = Server.CreateObject("Scripting.FileSystemObject") ' Create log entry logEntry = "[" & Now() & "] " If Len(context) > 0 Then logEntry = logEntry & "Context: " & context & " | " End If logEntry = logEntry & "Error #" & errObj.Number & ": " & errObj.Description If Len(errObj.Source) > 0 Then logEntry = logEntry & " | Source: " & errObj.Source End If logEntry = logEntry & vbCrLf ' Append to log file If fso.FileExists(m_log_file_path) Then Set logFile = fso.OpenTextFile(m_log_file_path, 8, False) ' 8 = ForAppending Else Set logFile = fso.CreateTextFile(m_log_file_path, True) End If logFile.Write logEntry logFile.Close Set logFile = Nothing Set fso = Nothing On Error GoTo 0 End Sub '--------------------------------------------------------------------------------------------------------------------- ' Quick check if an error exists '--------------------------------------------------------------------------------------------------------------------- Public Function HasError() HasError = (Err.Number <> 0) End Function '--------------------------------------------------------------------------------------------------------------------- ' Clear the current error '--------------------------------------------------------------------------------------------------------------------- Public Sub ClearError() Err.Clear End Sub '--------------------------------------------------------------------------------------------------------------------- ' Check and handle error in one call '--------------------------------------------------------------------------------------------------------------------- Public Function CheckAndHandle(context) If Err.Number <> 0 Then HandleError context, Err CheckAndHandle = True Else CheckAndHandle = False End If End Function End Class ' Singleton instance Dim ErrorHandler_Class__Singleton Function ErrorHandler() If IsEmpty(ErrorHandler_Class__Singleton) Then Set ErrorHandler_Class__Singleton = New ErrorHandler_Class End If Set ErrorHandler = ErrorHandler_Class__Singleton End Function %>