自定义TraceListener中的缩进

时间:2010-02-10 07:17:05

标签: c# system.diagnostics

我应该如何在自定义TraceListener中实现支持缩进?

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

即使有以下实现,也不起作用:

protected override void WriteIndent() { ... }

在该自定义TraceListener中。

我错过了什么吗?

3 个答案:

答案 0 :(得分:1)

您可以使用TextWriterTraceListener课程。它支持缩进。

答案 1 :(得分: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");
    }
}

答案 2 :(得分:1)

我已经把它想象成Trace的两个静态方法改变IndentLevel。所以我这样做:

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