asp.net中的抛出问题
下面,为什么asp.net中的抛出问题,asp.net,vb.net,exception-handling,log4net,throw,Asp.net,Vb.net,Exception Handling,Log4net,Throw,下面,为什么Throw不维护我的原始行号? 如果我运行DerivedPage,我的日志文件将错误列为第7行。 不应该写第四行吗?如果我有抛出ex,这是有道理的,但我没有。 Throw本身不是应该重新抛出并冒泡出错误吗 如果我在DerivedPage中完全删除Try…Catch块,那么我的日志文件会正确地将3列为错误行,但如果出现错误,我将无法记录任何信息 如何维护我的DerivedPage,并使日志保持正确的行号 Public Class DerivedPage Inherits BasePag
Throw
不维护我的原始行号?如果我运行DerivedPage,我的日志文件将错误列为第7行。
不应该写第四行吗?如果我有
抛出ex
,这是有道理的,但我没有。Throw
本身不是应该重新抛出并冒泡出错误吗
如果我在DerivedPage中完全删除Try…Catch
块,那么我的日志文件会正确地将3列为错误行,但如果出现错误,我将无法记录任何信息
如何维护我的DerivedPage,并使日志保持正确的行号
Public Class DerivedPage Inherits BasePage
Page_Load(o,e)
Try
Dim a = 3 -"a"
Catch ex As Exception
log.Info(...)
Throw
End Try
End Class
主页:
Public Class BasePage
Protected Overrides Sub OnError(e)
MyBase.OnError(e)
log.Error(Me.GetType(), Server.GetLastError)
End Sub
End Class
编辑:
日志。错误
会输出InnerException(如果存在)。在这种情况下确实如此。但是,InnerException的堆栈跟踪不包含行号,只包含异常详细信息。当重新恢复异常时,原始异常详细信息存储在对象的InnerException属性中。您的所有详细信息都应该在那里。当异常被重新释放时,原始异常详细信息存储在对象的InnerException属性中。您应该将所有详细信息都放在那里。您可以实现一种方法,在堆栈跟踪中为您提供正确的行号:
代码是C#,但是
PreserveStackTrace
方法的代码应该相对容易移植到VB.NET。有一种方法可以实现,它可以在堆栈跟踪中为您提供正确的行号:
代码在C#中,但是
PreserveStackTrace
方法的代码应该相对容易移植到VB.NET。解决方案:每个解决方案两个抛出一个新异常,当前异常作为内部异常,或者使用辅助方法。我将继续抛出一个新异常。解决方案:每个解决方案将抛出一个新异常,当前异常作为内部异常,或者使用帮助器方法。
我将抛出一个新异常。您检查过GetLastError返回的异常的InnerException吗?您检查过GetLastError返回的异常的InnerException吗?log4Net会打印出InnerException(如果存在)。在这种情况下确实如此。但是,InnerException堆栈跟踪不包含错误的行号。它只是给出了错误类型。@eych:您是否尝试过将日志语句更新为log.error(Me.GetType(),Server.GetLastError.InnerException)?如果InnerException存在,log4Net会打印出来。在这种情况下确实如此。但是,InnerException堆栈跟踪不包含错误的行号。它只是给出了错误类型。@eych:您是否尝试过将日志语句更新为log.error(Me.GetType(),Server.GetLastError.InnerException)?