2014-10-07 2 views
1

내 경계 경계선에 여백을 추가하려고했습니다.PostSharp OnMethodBoundaryAspect 들여 쓰기/안쪽 여백

스택 트레이스 내가 PostSharp가 (Indentation in Logging)

을 수행 알고 간단한 시나리오 약 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); 
    // ... 

인 프레임 카운트 기준을 계산하는 패턴을 찾을 수없는, 아니 도움이 될 것으로 보인다

어쨌든 이것을 수행 할 수 있습니까?

답변

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); // ...' –