1

そのため、ログの目的で Common.Logging.Log4Net を使用していますが、コードがマルチスレッドであるため、メッセージが混同されることがよくあります。

スレッド 1 からのメッセージ スレッド 2 からのメッセージ スレッド 1 からのメッセージ スレッド 1 からのメッセージ スレッド 2 からのメッセージ

これを回避するために、すべてのメッセージをまとめて取得しようとしており、実行が終了したときにそれらをすべて出力します。そのために、基本的に Action デリゲートのリストがあり、それぞれにログ行が含まれています。

            Log.DebugFormat("Handling...");

しかし残念ながら、これで問題が解決することはありません。なぜなら、ログに書き戻すと、リストに対して foreach を実行してデリゲートを実行するだけなので、メッセージが混在するからです。すべてのメッセージを一度に書き込む方法はありますか?

4

1 に答える 1

1

ある種のトランザクション ログを探しているようです。本来、アプリケーションのロギングは順次行われます。

私がすぐに考えることができるいくつかのオプション:

  • スレッド ID を記録します。出力を確認するときは、より適切なログ アナライザーを使用してください。CSV またはその他の一般的な形式を使用している場合、Excel は問題なく動作します。特定のスレッドのアクションに関心がある場合は、スレッド ID でフィルター処理します。まずはこのルートを試してみます。
  • 各スレッドを個別のファイルに記録します。マイクロソフトがこれを行うのを時々見たことがあります。うまくいくかもしれません。何らかの方法で各ファイルを一意に識別する必要があります。log4netがそれを処理できると推測します。
于 2012-12-06T17:55:01.140 に答える