使用C#自定义属性进行异常和审计跟踪日志记录

Mar*_*gco 8 c# logging custom-attributes

是否可以创建一个自定义功能来捕获由自定义属性设置的方法中的异常?

我打算做这样的事情:

[Logging(FeatureEnum.SomeFeature, IntentEnum.SomeIntent, "some comment")]
public void SomeMethodThatDoesATask()
{
    try
    {
      var doSomeAction = new LazyProcess();
      doSomeAction.WhoDunnit();
    }
    catch(Exception ex)
    {
       StaticMethodThatDoesLogging.CatchError(ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:如何捕获放置此属性的方法名称以及抛出的事件?它可以捕获异常,也可以自动记录调用此方法.

Dar*_*rov 5

这不容易实现.例如,TypeMock使用.NET框架分析器API来监视应用程序的执行.它允许您注册不同的事件,并在调用方法时发出通知,发生异常,......但这不是一件容易的事.

另一方面,您可以使用AOP,但它需要您修改代码,以便调用者使用一些生成的代理而不是真正的类.Spring.NET有一些很好的功能.

因此,基本上没有使用.NET框架Profiler API或者没有编写一些使用反射从给定类读取这些属性的自定义代码,您无法实现这一点.属性只是类元数据,没有能够理解它们的东西,它们什么都不做.