【问题标题】:Cleanest way to handle all exceptions in C#在 C# 中处理所有异常的最简洁方法
【发布时间】:2017-10-25 21:13:01
【问题描述】:

我一直在研究如何处理应用程序的所有异常,而不会过多地弄乱代码。此处的主要目标是将有关异常的信息发送到外部平台,例如 Application Insights。 到目前为止,我找到了以下方法:

  • 城堡拦截器:
    这是迄今为止最好的方法,问题是,对于要拦截的方法,要么方法是虚拟的,要么必须接口类。由于我正在开发一个非常大的应用程序,因此不需要这些更改。

  • 事件:
    使用 AppDomain UnhandledException 也是要考虑的,但由于我有几个应用程序域需要进行大量更改,因此只为异常处理类,这不是最佳的,因为类不应该仅仅因为异常处理而被弄乱。 除了 AppDomain 的数量之外,我还运行了几个线程,这些处理程序不会捕获异常。

  • PostSharp:
    PostSharp 的工作方式与 Castle 类似,如果我理解正确,这里的问题是我必须将属性/装饰器添加到我想要拦截的所有方法中,这也不是一个很好的方法。


如果有人对这里的最佳方法有任何建议,我将不胜感激。

【问题讨论】:

  • 您不一定想要处理应用程序的所有异常。一些例外是好的......它们会告诉你你的程序什么时候做它不应该做的事情。
  • @Abion47:捕获所有异常是好的。有时您想再次丢弃它们而不是恢复程序流程,但捕获它们以便您至少可以正确记录它们是好的。
  • 这里的重点是将异常信息发送到Application Insights,不一定要吃异常,我可以重新抛出它。就像@Chris 提到的那样:)
  • 我的这个任务可能会有所帮助stackoverflow.com/q/30326673/495455
  • 如果更改足够简单(例如在每个捕获中调用静态方法),也许您可​​以使用 Mono.Cecil github.com/jbevain/cecil 修改您的程序集.. 甚至使用它来添加所需的属性由 PostSharp .. 不确定是否是一个可行的解决方案,只是一个想法

标签: c# events exception-handling castle-windsor


【解决方案1】:

https://dncmagazine.blob.core.windows.net/edition30/DNCMag-Issue30.pdf 有一篇很好的文章,讨论了大型项目中的错误处理。可能侵入性最小的方法是使用全局异常处理程序。我还建议考虑使用诸如 log4net 之类的库,因为它可以使用多个存储(本地文件、SQL ......)记录异常详细信息,并且可以从配置文件重新配置,从而避免代码更改、重新编译和应用程序分发/安装。

对于那些不熟悉 DNCMag 的人 - 这是一本免费的编码员杂志,有许多优秀的文章,可以在http://www.dotnetcurry.com/magazine/查看

【讨论】:

    猜你喜欢
    • 2014-09-03
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多