12

これは OOP の概念に関する質問かもしれませんが、私がやりたいことは次のとおりです。

System.Diagnostics.Trace.WriteLine を使用してデバッグ情報を出力するアプリケーションがあるので、DebugView で表示できます。

代わりに、またはおそらくトレース出力に加えて、このメソッドをオーバーライド/拡張​​して (適切な用語がわからない)、テキストをファイルに記録したいと思います。これにより、アプリ用の新しい WriteLine メソッドを記述できるようになり、他のすべての System.Diagnostics.Trace.WriteLine ステートメントをアプリケーションの残りの部分で変更せずにそのままにしておくことができます。

では、VB.Net アプリ内でこのメソッドの動作を変更するにはどうすればよいでしょうか?

4

2 に答える 2

28

まだTraceを使用することに絶対に取り組んでいますか?そうでない場合は、 Log4Netなどのより完全な機能を備えたロギングシステムを使用します。

ただし、本当に使用したい場合は、ファイルで使用されるをTrace再構成できます。MSDNのドキュメントには、次のような例があります。TraceListenerapp.configTraceListener

<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="fileLogger" 
             type="System.Diagnostics.TextWriterTraceListener" 
             initializeData="LogFile.log" />
        <remove name="Default" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

TextWriterTraceListener指定されたファイルにログをダンプします。(他にも利用可能なオプションがあります。)

または、プログラムでこれを行うこともできます。

Trace.Listeners.Add(new TextWriterTraceListener("foo.log"));

アプリが終了する前に、次のいずれかを使用して、トレースを明示的にフラッシュする必要がある場合があることに注意してください。

Trace.Flush();

またはより複雑な:

foreach (TraceListener listener in Trace.Listeners)
{
    listener.Flush();
}

(これをテストするときにしなければならなかったので、私はそれについて言及するだけです!)

編集:コメントに記載されているように、書き込みのたびにリスナーがフラッシュされることに満足している場合(これにより、最後にフラッシュする必要はありませんが、パフォーマンスが低下する可能性があります)Trace.AutoFlush、trueに設定できます(XMLを含む-autoflush属性を参照してください) )。

于 2009-05-15T20:14:35.930 に答える
3

トレースログをファイルに出力するように構成できるTextWriterTraceListenerがあります。構成情報は、MSDNの次の場所にあります。

http://msdn.microsoft.com/en-us/library/system.diagnostics.textwritertracelistener(VS.80).aspx

また、イベントログまたはその他のさまざまな場所にダンプして、ここで確認できる組み込みのトレースリスナーのリストを確認することもできます。

http://msdn.microsoft.com/en-us/library/4y5y10s7(VS.80).aspx

于 2009-05-15T20:15:31.730 に答える