在编译时抑制单个方法的属性?

时间:2010-11-02 17:19:30

标签: c# logging postsharp

我正在使用PostSharp,我想为类中的一个方法抑制(或更改)现有的全局属性。

在下面的示例中,我希望记录类“thisIsLogged()”,并且不记录类“thisIsNotLogged()”。

但是,它不起作用:属性“[LogThis(false)]”只是添加到现有的类级别属性,并且无论如何都会进行日志记录。有什么想法吗?

[LogThis(true)] // uses PostSharp + SmartInspect to switch on logging for the entire class
class doSomething
{
  void thisIsLogged(int x)
  {
     // entry/exit from this class is automatically logged
  }
  [LogThis(false)] // aim: suppress logging for this method, if [LogThis(true)] is switched on for the entire class (however, this doesn't work as attributes are additive)
  void thisIsNotLogged(int x)
  {
     // I want to suppress the entry/exit logging for this class, to reduce log size
     // However, this *doesnt work*; logging occurs anyway
     // as attributes are additive - any ideas?
  }
}

修改

使用[LogThis(AttributeExclude = true)],这工作正常(参见下面的解决方案)。

1 个答案:

答案 0 :(得分:1)

考虑使用MethodPointcut,正如盖尔亲切地建议我在遇到类似问题时使用的那样。这为您提供了很大的灵活性来决定哪些方法可以增加方面,包括检查属性。