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

标签 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);
    }
}

问题是: 如何捕获放置此属性的方法名称以及引发的事件?它可以捕获异常或仅自动记录此方法已被调用。

最佳答案

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

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

因此,如果不使用 .NET Framework Profiler API 或不编写一些自定义代码来使用反射从给定类中读取这些属性,则基本上无法实现此目的。属性只是类元数据,如果没有任何可以理解它们的东西,它们什么都不做。

关于c# - 使用 C# 自定义属性进行异常和审计跟踪记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4516769/

相关文章:

asp.net-mvc - ASP.NET MVC 如何应用基于角色或基于身份验证的 View 呈现?

c# - 将音符写入 wav 文件

javascript - 为什么我不能做 1.toString() 但我可以做 var a = 1; a.toString()

c# - 装饰主要方法的属性构造函数不会在发布版本中被调用

c# - 忽略/覆盖 AttributeUsage 限制

日志消息中提到的 git rebase 和 SHA

c# - 使用 LINQ to Objects 在一个集合中查找与另一个集合不匹配的项目

c# - 随机双数的多次迭代往往会变小

java - log4j 和 weblogic : duplicate log messages

ruby - 使用 Ruby 将文件流式传输到浏览器