gre*_*b64 4 .net c# reflection logging exception
我有一个企业应用程序,可以在发生任何事件时记录异常信息.该应用程序是C#和C++ .net的组合.
我想在异常时获得尽可能多的信息.截至目前,我们只打印出Message和堆栈跟踪(在调试版本中提供行号,但不释放).
任何错误日志的目标都是尽可能地指出错误(尽可能接近).我很好奇我怎么能走得更远?我想要更多信息.
作为一个例子,我知道NullReferenceExceptions和InvalidArguementExceptions包含不同数量的信息,但我没有利用除"消息"字段之外的任何东西.
我最好的选择是使用反射并捕获所有公共成员并打印出来吗?或者可能链式TONS进行类型检查和转换,以便干净地打印出来?作为约束,我的日志记录功能只需要接受Exception类型的参数.
一般来说,答案是记录ex.ToString().通常,对象的ToString方法显示对象希望您知道的内容.对于基本Exception类,除了包含任何InnerException实例的消息和堆栈跟踪之外,还包括消息和堆栈跟踪.特定派生类的Exception可能会显示更多信息.
SqlException等一些异常也会捕获其他信息(如存储过程名称和亚麻布).在这些情况下,序列化整个异常并将其作为XML保存在日志记录数据库中会很有帮助.请注意,并非所有异常类都可以序列化,因此请准备好在XML部分上进行操作.
此外,如果你所做的只是记录异常,那么你可能想要重新抛出异常,以便更高级别有机会处理它.当然,当你已经处于"顶级"时,这不适用.
试试看:
try
{
//...
}
catch(Exception ex)
{
Messagebox.Show(ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)
它显示了很多信息,包括所有异常的异常类型,消息和堆栈跟踪(InnerException所有异常排序)。
在MSDN中的更多信息。
| 归档时间: |
|
| 查看次数: |
5154 次 |
| 最近记录: |