カスタム TraceListener でインデントをサポートするにはどうすればよいですか?
Trace.Indent();
// or
Trace.Unindent();
以下の実装があっても機能しません。
protected override void WriteIndent() { ... }
そのカスタム TraceListener で。
何か不足していますか?
カスタム TraceListener でインデントをサポートするにはどうすればよいですか?
Trace.Indent();
// or
Trace.Unindent();
以下の実装があっても機能しません。
protected override void WriteIndent() { ... }
そのカスタム TraceListener で。
何か不足していますか?
TextWriterTraceListener
クラスを使用できます。インデントをサポートします。
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");
}
}
Traceの2つの静的メソッドがIndentLevelを変更するため、私はそれを理解しました。だから私はこれをやっています:
...
if (entry.IndentLevel > 0)
writer.WriteLine(
new string(' ', entry.IndentLevel * IndentSize) +
...