75

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これは、ワーカー メソッドが別の場所から呼び出されたり、別のアセンブリに存在したりする可能性があるためです。別のトレース リスナーをアタッチできるようにしたいのです。では、コンソールをトレースに接続するにはどうすればよいでしょうか?

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

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
4

3 に答える 3

158

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 も含めました。

于 2008-10-13T17:21:45.853 に答える
56

ジョエル、

app config メソッドの代わりにこれを行うことができます。

Trace.Listeners.Add(new ConsoleTraceListener());

または、アプリの存続期間中にリスナーの追加または削除を管理する場合は、次のようにします。

ConsoleTraceListener listener = new ConsoleTraceListener();
Trace.Listeners.Add(listener);

Trace.WriteLine("Howdy");

Trace.Listeners.Remove(listener);

Trace.Close();
于 2009-10-23T15:35:09.263 に答える
11

素晴らしい解決策ですが、同じ呼び出し元のexeによって異なるdllが実行されている状況があるため、呼び出し元のexeの.configファイルを変更したくありません。各dllがトレース出力の独自の変更を処理するようにします。

簡単です:

Stream outResultsFile = File.Create ("output.txt");
var textListener = new TextWriterTraceListener (outResultsFile);
Trace.Listeners.Add (textListener);

もちろん、これはトレース出力を「output.txt」ファイルに出力します。

于 2009-05-14T14:59:16.337 に答える