使用StackTrace进行异常日志记录

时间:2012-07-26 19:13:42

标签: c# vb.net

我想记录Exception详细信息 Filename,FileLineNo,方法名称(发生异常的地方) 这是使用StackTrace类 但有时我得到文件行号和方法名称为null 如何在发生异常时跟踪异常详细信息

这是我的代码

Public Shared Sub LogException(ByVal ex As Exception)

Dim trace As Diagnostics.StackTrace = New Diagnostics.StackTrace(ex, True)
LogInfo(String.Format("Error Message :{0}  => Error In :{1}  => Line Number :{2} => Error Method:{3}",
                              ex.Message, trace.GetFrame(0).GetFileName(),
                              trace.GetFrame(0).GetFileLineNumber(),
                              trace.GetFrame(0).GetMethod().Name))
End Sub

3 个答案:

答案 0 :(得分:4)

因此,您可能会立即回答所有问题:“捕获的异常将包含它可能具有的所有详细信息。”

您的公共共享子LogException正在获取一个已经包含大部分信息的Exception对象。所以,你可以做......

LogInfo(ex.ToString())

...并尽可能详细地获取详细信息。

在某些情况下,您可能没有文件名或行号,在某些情况下,您拥有的LogInfo语句本身也会引发异常。 This解释了如何可靠地获取这些细节,尽管它带来了潜在的安全风险。

我发现Exception.ToString()中包含的异常类型和堆栈跟踪信息通常足以查明实际错误。如果不是,它通常是代码结构的问题。

答案 1 :(得分:2)

异常已包含完整堆栈跟踪。您无需创建新的。

答案 2 :(得分:1)

1)您可以使用Exception.StackTrace从Exception对象中获取堆栈跟踪。您无需创建新的。

2)如果从某个地方抛出异常,你没有调试信息(例如在框架内),你可能根本就没有行号或源文件来获取