Global.asax不写入应用程序EventLog源

时间:2013-04-03 18:10:30

标签: .net httphandler global-asax event-log

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

在您提出要求之前澄清,是的,EventLog源存在。我遇到的问题是异常本身不会写入我的应用程序的EventLog Source(为了这个例子我们会说事件日志源名为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的事件日志源在Web.Config文件中保存为<AppSetting>,并分配给_eventLogSource中的global.asax成员。我还在应用程序中对同一个事件日志源(在global.asax之外)进行了其他日志记录,并且所有这些都可以正常运行。

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

1 个答案:

答案 0 :(得分:1)

所以我做了一些实验......这似乎是因为从ExceptionOutputMessageQueueWriteFailedException的演员而发生的。

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

我不太清楚为什么会这样。欢迎任何有关该主题的详细说明!