让我们面对现实吧,有些时候你可以通过简单地跟踪异常并在出现故障时报告这些异常,但大多数情况下,当你执行复杂的操作并对抗你没有构建的库时,你必须跟踪自己发生的一切事情,这样如果出现问题,你可以正确报告。否则,你可能会出现一些奇怪的错误,如:“字符串不能为空”,没有更多的信息......但是在你的代码中,可能有成千上万行代码会出现这个错误,这会使对这个错误进行故障排除是一个完整的噩梦,更不用说向用户报告正确的详细信息几乎是不可能的!
让我们举一个小例子来解决这个问题......假设您正在构建一个应用程序,它从开发站获取IIS的开发人员设置,并使用{{1将它们应用到某个服务器上}}。这将涉及多个对象,例如Microsoft.Web.Administration
,Site
,ApplicationPool
,Application
等......可以包含多个属性值。
一旦进入服务器,您必须获取开发人员设置的每个属性值并将其应用于实际服务器,并且这些操作中的任何一个都可能由于某种原因而失败。
为了跟踪正确报告的进度和/或失败,您必须实现自己的代码,因为VirtualDirectory
库遗憾地没有在其异常消息中提供很多细节......
我一直这样做的方法是在“应用设置/前端”例程中保留一个本地日志,然后用它来知道代码失败时代码的位置......这样的事情:< / p>
Microsoft.Web.Administration
在上面演示的失败的情况下,在这样一个伟大且易于阅读的日志中会出现哪种结果:
- Deployment starting... - ..... - ..... - Applying pool.Failure.AutoShutdownExe - Deploy failure! Fatal error occurred. Type: ArgumentNullException Message: String cannot be empty Stack Trace: ......... Line 35.. .
这很有效,因为我可以很容易地看到它失败的地方,但我觉得我花了大部分时间来编写这些日志记录条目而不是实际编写功能本身,我想知道是否有更简单的方法来做到这一点?就像将这个跟踪功能移动到“对象”本身一样,通过使它们成为“自我感知对象”来跟踪它们最后访问的属性,然后可以用它来报告以后或某些东西?
那么你通常做什么?
- 不要详细说明跟踪,只是脱口而出错误就是这样吗?
- 以类似于我上面所做的方式进行详细的跟踪?
- 完全不同的东西?
是否有一种标准且经过验证的方法可以减轻开发人员的负担?