2010-12-16 5 views

答えて

3

があります http://logging.apache.org/log4net/release/faq.html

号log4netのは信頼できません。これは、ベストエフォート方式のフェイルストップロギングシステムです。

フェイルストップとは、log4netが実行時に予期しない例外をスローしてアプリケーションがクラッシュする可能性があるということです。なんらかの理由でlog4netがキャッチされない例外をスローした場合(ArgumentExceptionとArgumentNullExceptionがスローされる場合を除く)、[email protected]メーリングリストに電子メールを送ってください。キャッチされない例外は、すぐに注意を必要とする深刻なバグとして処理されます。

私は個人的にいつも使っていて問題は一度もありませんでした。

+0

私は少なくともColoredConsoleAppenderがアプリケーションをハングするのではないかと心配です。私は実際に1つを満たす – user496949

+0

@ user496949:私は同じ問題に遭遇しました。私はInvisbleプロセスを使用していて、ColoredConsoleAppenderを追加していました。 –

+0

私は実際にこの問題を解決しました。呼び出し元のプロセスは出力ストリームから読み込まれず、最終的にストリームは "フル"でした。 –

2

@ ralf.w。すでに完全な症状を示しています。私は最近同じ問題に直面したので言い換えることもできます。

  1. ColoredConsoleAppender(またはConsoleAppender)を使用してログを出力するコンソールアプリケーションを開発します。
  2. 別のアプリケーション(私の場合はWinForms)を開発して(Process.Startを使用して)そのコンソールを実行してください。 UseShellExecute = false標準出力とエラーをリダイレクトします。 CreateNoWindow = true。 WindowStyle =非表示です。

いくつかのマシン(またはリモートデスクトップセッション)では、log4netはコンソールアプリケーションをハングし、ハングダンプでは、ストリームへの書き込みが完了するのを奇妙に待っています。

log4netはオープンソースですが、通常のマシン(私のようなもの)で再現するのは難しいので、さらに調査するのは難しいです。

回避策はコンソールアプリケーションを(隠されているのではなく)最小化して表示するか、他のProcessStartInfo設定を変更するなどの簡単な方法で行うことができます。

+1

私たちは似たようなものを見ていました。 log4net(および/またはWindows)が最大4KBの出力をstdout/stderrにバッファリングしていることが判明しました。そのバッファがいっぱいになると、それ以降のログ呼び出しがハングします。 プロセスAがプロセスBを起動し、プロセスBがコンソールにログを記録し、プロセスAが起動したプロセス(プロセスB)からstdoutを読み込まない場合、プロセスBはバッファがいっぱいになるとハングします。 リダイレクトを有効にすると、問題が解決されます。プロセスAがstdoutを読むと、問題が解決されます。 – Jimothy

+0

@ジムシーあなたは私のために問題を解決しました;)Thx。 – nozzleman

関連する問題