【问题标题】:How to exclude from OnMethodBoundaryAspect-based logging?如何从基于 OnMethodBoundaryAspect 的日志记录中排除?
【发布时间】:2013-03-21 17:53:03
【问题描述】:

我有这个记录器:

[Serializable]
[AttributeUsage(AttributeTargets.All)]
public class MethodsInterceptAspect : OnMethodBoundaryAspect {
    public override void OnEntry(MethodExecutionArgs args) { Logger.LogMethodEntry(args.Method, DateTime.Now); }
    public override void OnExit(MethodExecutionArgs args) { Logger.LogMethodExit(args.Method, DateTime.Now); }
}

但是有一个密集的函数(许多嵌套循环,对性能至关重要)也会使日志膨胀。如何排除它及其所有子例程?

【问题讨论】:

    标签: c# c#-4.0 postsharp aop


    【解决方案1】:

    您可以使用方面的AttributeExclude=true 属性来执行此操作。排除可以在程序集级别应用

    [assembly: Trace("Business", AttributeTargetTypes="BusinessLayer.*", AttributePriority = 1)]
    [assembly: Trace(AttributeTargetMembers="Dispose", AttributeExclude = true, AttributePriority = 2)]
    

    或按方法

    [assembly: Trace("Business", AttributeTargetTypes="BusinessLayer.*")]
    namespace BusinessLayer
    {
      public class Process : IDisposable
      {
       public Customer Create(string value) { ... }
       public void Delete(long id) { ... }
    
       [Trace(AttributeExclude=true)]
       public void Dispose() { ... }
      }
    }
    

    A more complete answer can be found here

    【讨论】:

    • 我花了一些时间来考虑它,因为我的问题是“......我如何排除它及其所有子程序?”,强调最后一部分:“......及其所有子程序?”。但似乎没有纯粹的AOPPostSharp 方式来做到这一点..
    • 似乎没有您需要的自动传播。
    猜你喜欢
    • 1970-01-01
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 2011-04-15
    • 1970-01-01
    相关资源
    最近更新 更多