【问题标题】:Custom error handeling and log自定义错误处理和日志
【发布时间】:2011-04-26 14:32:52
【问题描述】:

如您所知,处理错误的基本方法是 try ... catch ... finally 结构。

如果我们想处理每个错误并将其保存到文件中,我们必须在 catch 部分添加一行以保存错误详细信息。

问题是: 覆盖捕获事件有什么解决方案吗?

换句话说,考虑 try ... catch ... finally 结构类似于其他应用程序事件并覆盖 catch 部分,运行我们的自定义代码 next run catch 部分代码。

有可能吗?

【问题讨论】:

    标签: c# asp.net syntax error-handling class-design


    【解决方案1】:

    我相信解决这类问题的最佳方法之一是使用面向方面的编程。

    事实上,你想要的东西必须:

    • 处理异常。
    • 记录异常。

    有一个名为 IL 编织的概念,它基于编译后代码注入,可简化面向方面的编程。

    也就是说,您可以在执行方法和属性之前和之后做一些事情,归根结底,这就是“处理任何程序集成员中抛出的任何异常”,不是吗?

    例如,我有一些使用 PostSharp 的经验,它实现了 IL 编织,并且非常容易使用它:它是基于属性的。

    您需要实现一个派生一些 PostSharp 基础属性的自定义属性,并且它可以覆盖将在执行放置属性的方法/属性之前和之后调用的某些方法。

    异常处理可以实现为“HandleExceptionAttribute”并记录“LogAttribute”(这只是一个示例!)。

    了解更多关于 PostSharp 的信息(如果我没记错的话,它有一个免费的社区版):

    还有一些“操作方法”:

    【讨论】:

    • 太棒了。我阅读了您的解决方案并看到了链接。但我真的不明白这能做什么!即使程序员编写了她/他的catch部分,它是否可以处理所有项目类中的任何错误?
    • 就是这样!你可以这样做:)
    【解决方案2】:

    您可以捕获特定的异常类型

    Try
    {do something}
    catch (SystemException ex) { }
    catch (InvalidOperationException ex) { }
    catch (Exception ex) { }
    

    这是你的意思吗?

    否则你可以实现Exception Handler Class

    【讨论】:

    • 不,亲爱的。谢谢您的回答。即使我们编写 catch (Exception ex) { ... } 代码,我也想覆盖发生的 catch 部分
    猜你喜欢
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    相关资源
    最近更新 更多