我一直在尝试为自己的Method Boundary Aspect添加一些填充。
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)
无论如何要做到这一点?
答案 0 :(得分:1)
创建StackTrace通常非常慢,我不会在记录期间推荐它。
最简单的方法是声明:
[ThreadStatic]
private static int indentLevel;
然后,您需要做的就是在OnEntry和OnExit建议中正确地增加和减少此变量。