0

アプリケーションからのすべてのコンソール出力をテキスト ファイルに記録できるようにしたいと考えています。次の投稿で説明されているように、ConsoleTraceListener と TextWriterTraceListener を実装しました: Mirroring console output to a file

これは、すべての通常のコンソール出力でうまく機能します。ただし、StdError ストリームもログ ファイルに表示されるようにしたいと考えています。最終的に DivideByZeroException をスローするいくつかの単純なコードでテストしました (コードを以下に示します)。上記の投稿で提案されている実装では、エラー メッセージはコンソールに表示されますが、ログ ファイルには表示されません。

これを達成する方法について誰か提案がありますか? Stderror ストリームをリダイレクトするつもりはないことに注意してください。エラー メッセージがコンソールとログ ファイルの両方に表示されることが理想的です。

提案をお寄せいただきありがとうございます!

Trace.Listeners.Clear();
string logfilePath = @"Q:\logfile.txt";
TextWriterTraceListener log_tracer = new TextWriterTraceListener(logfilePath);
log_tracer.TraceOutputOptions = TraceOptions.ThreadId | TraceOptions.DateTime;
ConsoleTraceListener console_tracer = new ConsoleTraceListener(false);
console_tracer.TraceOutputOptions = TraceOptions.DateTime;
Trace.Listeners.Add(log_tracer);
Trace.Listeners.Add(console_tracer);
Trace.AutoFlush = true;

Trace.WriteLine("HELLO THIS IS TO TEST THE TRACE LISTENER");
for (int a = 5; a >= 0; a--) {
    Trace.WriteLine(50 / a);
}
4

1 に答える 1

0

同じ質問をしている人の利益のために、問題を回避する方法を次に示します。

私は基本的に例外ハンドラーを実装し、Trace.WriteLine() をコードのキャッチ部分の中に配置しました。例えば:

try {
    // Code that can potentially create StdError message
}
catch (Exception ex) {
    Trace.WriteLine(ex.ToString());
}

誰かが同じ問題を抱えていた場合に備えて、それが役立つことを願っています!

于 2012-07-16T22:16:31.673 に答える