0

Application_Error()当我的全局应用程序文件 ( global.asax) 中抛出和处理异常时,我在 HttpHandler 中遇到问题。我正在尝试exception.Message在我的应用程序的 EventLog 源中编写。

在你问之前澄清一下,是的,EventLog 源存在。我遇到的问题是异常本身不会写入我的应用程序的 EventLog 源(为了这个例子,我们会说事件日志源被命名HttpEndpoint),而是将自身记录到 ASP.NET 4.0。 30319.0 事件日志源。

有没有什么办法可以解决这个问题而不取消 global.asax 的Application_Error()方法,包装在抛出此错误之前执行的方法try{}catch{}并以这种方式写入应用程序的事件日志源?

中的代码Application_Error()非常简单:

  protected void Application_Error( object sender, EventArgs e )
  {
     var exception = Server.GetLastError();

     if ( exception == null )
     {
        return;
     }

     // try casting exception to known types for more specific event log entries
     var msmqOutputQueueWriteFailedException = exception as OutputMessageQueueWriteFailedException;

     if ( msmqOutputQueueWriteFailedException != null )
     {
        _windowsEventLog.LogFatal( _eventLogSource, string.Format( CultureInfo.CurrentCulture, "MSMQ Message Send Failure: {0} - InnerException Message: {1}", msmqOutputQueueWriteFailedException.Message, msmqOutputQueueWriteFailedException.InnerException.Message ) );
     }

     _windowsEventLog.LogError( _eventLogSource, String.Format( CultureInfo.CurrentCulture, "Global Exception was thrown: {0}", exception.Message ), exception );
  }

的事件日志源HttpEndpoint保存<AppSetting>在 Web.Config 文件中,并分配给 中的_eventLogSource成员global.asax。我还在应用程序内对同一个事件日志源(在外部global.asax)进行其他日志记录,并且一切正常且花花公子。

有任何想法吗?非常感谢任何帮助/反馈。

4

1 回答 1

1

所以我做了一些实验......这似乎是因为演员 from Exceptionto OutputMessageQueueWriteFailedException

如果我不尝试强制转换异常类型,而只是让异常消息写入事件日志中的_windowsEventLog.LogError()行而不是_windowsEventLog.LogFatal(),它会写入我想要的事件日志源。

我不太确定为什么会这样。欢迎对此主题的任何详细说明!

于 2013-04-03T18:31:16.300 回答