.net 向异常添加数据项,但不调用throw-ex
我已扩展NLog以记录Exception.Data collection中的所有项。因此,当我捕获到一个SqlException时,在我的数据访问代码中,我喜欢向Exception.data字典添加一些项目,以提供更好的日志记录。我并不总是想从catch中记录日志,而是让异常冒泡起来,稍后再处理。所以我写了这样的东西:.net 向异常添加数据项,但不调用throw-ex,.net,vb.net,exception,.net,Vb.net,Exception,我已扩展NLog以记录Exception.Data collection中的所有项。因此,当我捕获到一个SqlException时,在我的数据访问代码中,我喜欢向Exception.data字典添加一些项目,以提供更好的日志记录。我并不总是想从catch中记录日志,而是让异常冒泡起来,稍后再处理。所以我写了这样的东西: Try ... Catch exception As Exception exception.Data.Add("SP", StoreProcedureNameCos
Try
...
Catch exception As Exception
exception.Data.Add("SP", StoreProcedureNameCost)
exception.Data.Add("Connection", myConnection.ConnectionString)
Throw
End Try
调用just
Throw
而不是Throw exception
是否仍然有我添加的所有数据项?我自己尝试了一下,它的工作原理与我所希望的一样。仅调用throw不会保留添加到异常的新数据:
Try
Try
Throw New NotImplementedException("Hi")
Catch ex As Exception
ex.Data.Add("Here", "It is there")
Throw
End Try
Catch ex As Exception
Dim msg As String = ex.Data("Here").ToString()
Response.Write(msg)
End Try
它工作了,并吐出“它在那里”。是的,它将保留对数据属性所做的更改。
throw
和throw ex
之间的根本区别在于,堆栈跟踪不会随着调用throw
而改变,而堆栈跟踪会随着throw ex
而改变,这很容易在编译器中尝试……Downvoter,Downvoter是用来做什么的?