C# 自定义错误处理和日志

C# 自定义错误处理和日志,c#,asp.net,syntax,error-handling,class-design,C#,Asp.net,Syntax,Error Handling,Class Design,正如您所知,处理错误的基本方法是尝试。。。抓住。。。最后是结构 如果我们想处理每个错误并将其保存到一个文件中,我们必须添加一行来捕获保存错误详细信息的部分 问题是: 是否有覆盖捕获事件的解决方案 换句话说,考虑一下…抓住。。。最后,结构类似于其他应用程序事件并覆盖catch部分,运行我们的自定义代码,然后运行catch部分代码 有可能吗?您可以捕获特定的异常类型 Try {do something} catch (SystemException ex) { } catch (InvalidOpe

正如您所知,处理错误的基本方法是尝试。。。抓住。。。最后是结构

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

问题是: 是否有覆盖捕获事件的解决方案

换句话说,考虑一下…抓住。。。最后,结构类似于其他应用程序事件并覆盖catch部分,运行我们的自定义代码,然后运行catch部分代码


有可能吗?

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

Try
{do something}
catch (SystemException ex) { }
catch (InvalidOperationException ex) { }
catch (Exception ex) { }
这就是你的意思吗


否则您可以实现一个

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

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

  • 处理异常
  • 日志异常
有一个叫做IL编织的概念,它基于编译后代码注入,简化了面向方面的编程

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

例如,我对PostSharp有一些经验,它实现了IL编织,使使用它变得非常简单:它是基于属性的

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

异常处理可以实现为“HandleExceptionAttribute”和日志“LogAttribute”(这只是一个示例!)

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

以及一些“操作方法”:


  • 不,亲爱的。谢谢你的回答。我想重写发生的catch部分,即使我们编写catch(Exception ex){…}code也是如此。我阅读了您的解决方案,并看到了这些链接。但我真的不明白这能做什么!它是否可以处理所有项目类中的任何错误,即使程序员编写了她/他的catch部分?就是这样!你可以这样做:)