【发布时间】:2013-01-12 01:22:16
【问题描述】:
我有一个企业应用程序,它会在发生异常信息时记录异常信息。该应用程序是 C# 和 C++.net 的组合。
我想在异常发生时尽可能多地获得信息。截至目前,我们只打印出消息和堆栈跟踪(在调试版本中提供行号,但不提供发布)。
任何错误日志的目标都是尽其所能(尽可能接近)指出错误。我很好奇我怎么能走得更远?我想要更多信息。
例如,我知道 NullReferenceExceptions 和 InvalidArguementExceptions 包含不同数量的信息,但我没有利用除“消息”字段之外的任何内容。
我最好的选择是使用反射并捕获所有公共成员并将它们打印出来吗?或者也许链接大量的类型检查和强制转换以干净地打印出来?作为一个约束,我的日志记录函数只需要接受一个异常类型的参数。
【问题讨论】:
-
在异常对象上调用
ToString()通常足以满足我的需要。这给了我异常类型、消息和堆栈跟踪。 -
这些东西都很有用,但是,我遇到了在非常大规模的算法中间出现空引用异常的问题。在这种情况下,nullreferencexception 包含引发异常的变量的数据类型,如果能获得该信息,那就太好了!
-
我不关心当前的异常处理和恢复。现在我只是在尝试优化我们的异常记录器以包含更多信息。
-
在记录异常时是否会循环记录内部异常,以便为您提供尽可能多的信息?
-
@James,不,我不知道。这是个好主意。
标签: c# .net exception logging reflection