1. ホーム
  2. .net

トレース出力のコンソールへのリダイレクト

2023-11-18 07:02:30

質問

VB.Net で小さなバッチ処理コンソール アプリに取り組んでいるとします。 私は、このようなアプリを構成できるようにしたいと思います。

Sub WorkerMethod()
   'Do some work
   Trace.WriteLine("Work progress")

   'Do more work
   Trace.WriteLine("Another progress update")

   '...
End Sub


Sub Main()

   'Do any setup, like confirm the user wants to continue or whatever

   WorkerMethod()     

End Sub

を使っていることに注意してください。 Trace ではなく Console を出力するようにしました。 これは、ワーカーメソッドが他の場所から呼び出されたり、別のアセンブリに住んでいる可能性があり、私はそれに異なるトレースリスナーをアタッチできるようにしたいからです。 では、どのようにしたらコンソールをトレースに接続できるのでしょうか?

私はすでに単純なクラス (以下に示す) を定義し、トレースのリスナー コレクションにインスタンスを追加することによってそれを行うことができますが、これを達成するために、より受け入れられ、組み込まれた方法があるのかどうか疑問に思っています。

Public Class ConsoleTrace
    Inherits Diagnostics.TraceListener

    Public Overloads Overrides Sub Write(ByVal message As String)
        Console.Write(message)
    End Sub

    Public Overloads Overrides Sub WriteLine(ByVal message As String)
        Console.WriteLine(message)
    End Sub
End Class

どのように解決するのですか?

exe の .config ファイルに以下を追加してください。

<?xml version="1.0"?>
<configuration>
    <system.diagnostics>
        <trace autoflush="true">
            <listeners>
                <add name="logListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="cat.log" />
                <add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>
            </listeners>
        </trace>
    </system.diagnostics>
</configuration>

ファイルへのロギングに興味がある人のために、TextWriterも入れておきました。