【问题标题】:PostSharp OnMethodBoundaryAspect Indent/PaddingPostSharp OnMethodBoundaryAspect 缩进/填充
【发布时间】:2014-10-07 18:12:26
【问题描述】:

我一直在尝试为我自己的方法边界方面添加一些填充。

StackTrace 似乎没有任何帮助,我找不到计算帧数基线的模式,对于简单的场景来说,它大约是 12。

[Serializable]
public class MyLogger : OnMethodBoundaryAspect
  public override void OnEntry(MethodExecutionArgs args)
  {
    // ...
    var ignoreFrameCount = ???; // in simple scenarios is ~12
    var n = new StackTrace().FrameCount - ignoreFrameCount;
    var padding = String.Empty.PadLeft(n*2);
    // ...

我知道 PostSharp 会这样做 (Indentation in Logging)

有没有办法做到这一点?

【问题讨论】:

    标签: c# nlog postsharp


    【解决方案1】:

    创建 StackTrace 通常真的很慢,我当然不会在日志记录期间推荐它。

    最简单的方法是声明:

    [ThreadStatic]
    private static int indentLevel;
    

    然后,您需要做的就是在 OnEntry 和 OnExit 建议中正确地增加和减少这个变量。

    【讨论】:

    • 效果很好。下面的一些代码供那些可能希望看到集成到问题的解决方案的人使用。 ` [ThreadStatic] 私有静态 int _indentLevel;公共覆盖 void OnEntry(MethodExecutionArgs args) { var padding = String.Empty.PadLeft(_indentLevel++*2); // ... public override void OnExit(MethodExecutionArgs args) { var padding = String.Empty.PadLeft(--_indentLevel*2); // ...`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多