2010-02-10 2 views
0

사용자 지정 TraceListener에서 들여 쓰기를 구현하는 방법은 무엇입니까? 그 정의 TraceListener에서에서사용자 지정 TraceListener의 들여 쓰기

protected override void WriteIndent() { ... } 

:의 구현이있는 경우

Trace.Indent(); 
// or 
Trace.Unindent(); 

도 작동하지 않습니다.

내가 누락 된 항목이 있습니까?

+0

그래서 제안 된 것이 유용 했습니까? –

+0

내 재생을 참조하십시오 (코드가 주석에 엉망이됩니다). –

답변

1

Trace change IndentLevel의 2 가지 정적 메서드로 알아 냈습니다. 그래서 나는 이것을하고있다 :

... 
if (entry.IndentLevel > 0) 
    writer.WriteLine(
     new string(' ', entry.IndentLevel * IndentSize) + 
... 
1

TextWriterTraceListener 클래스를 사용할 수 있습니다. 들여 쓰기를 지원합니다.

+0

고맙습니다. TextWriterTraceListener는 다중 스레드가 아닙니다. BTW 내 추적 수신기가 잘 작동하고 있습니다 (아직! 멀티 스레드 응용 프로그램이기 때문에 ...))). –

1

WriteIndent (문서를 올바르게 해석 할 경우)을 직접 명시해야한다고 생각합니다. 이 코드는 예상대로 작동합니다.

using System; 
using System.Xml.Serialization; 
using System.Diagnostics; 

class Program { 

    class TestListener : TraceListener { 

     protected override void WriteIndent() { 
      if (NeedIndent) { 
       string indent = new string(' ',IndentLevel * IndentSize); 
       Console.Write(indent); 
      } 
     } 

     public override void Write(string message) { 
      WriteIndent(); 
      Console.Write(message); 
     } 

     public override void WriteLine(string message) { 
      WriteIndent(); 
      Console.WriteLine(message); 
     } 
    } 


    public static void Main(params string[] args) { 

     Trace.Listeners.Add(new TestListener()); 
     Trace.IndentSize = 2; 
     Trace.WriteLine("test"); 
     Trace.IndentLevel = 4; 
     Trace.WriteLine("indented"); 
    } 
} 
+0

감사. 나는 비슷한 것을했다. Trace.Indent와 Unentent가 IndentLevel을 변경한다는 것을 알았습니다. 들여 쓰기 삽입이 필요한지 알아 내기 위해이 속성을 사용하고 있습니다. –