2014-10-07 34 views
1

我一直試圖添加一些填充到我自己的方法邊界方面。PostSharp OnMethodBoundaryAspect縮進/填充

堆棧跟蹤似乎沒有幫助,我無法找到一個模式來計算幀計數基準線,這對於簡單的場景大約是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

無論如何要完成這個嗎?

回答

1

創建一個StackTrace通常真的很慢,我不會在日誌記錄中推薦它。

最簡單的方法是聲明:

[ThreadStatic] 
private static int indentLevel; 

然後,所有你需要做的是正確遞增和遞減中OnEntry和建議的OnExit這個變量。

+0

工作得很好。下面的一些代碼適用於那些希望將解決方案集成到問題中的人員。 [ThreadStatic] private static int _indentLevel; public override void OnEntry(MethodExecutionArgs args) var padding = String.Empty.PadLeft(_indentLevel ++ * 2); // ... public override void OnExit(MethodExecutionArgs args) var padding = String.Empty.PadLeft(--_ indentLevel * 2); // ...' – 2014-10-13 13:46:35