在我的全局应用程序文件(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
之外)进行了其他日志记录,并且所有这些都可以正常运行。
有什么想法吗?非常感谢任何帮助/反馈。
答案 0 :(得分:1)
所以我做了一些实验......这似乎是因为从Exception
到OutputMessageQueueWriteFailedException
的演员而发生的。
如果我不尝试强制转换异常类型,只是让异常的消息写入_windowsEventLog.LogError()
行而不是_windowsEventLog.LogFatal()
的事件日志,它就会被写入事件日志我想要的来源。
我不太清楚为什么会这样。欢迎任何有关该主题的详细说明!