1

Sql Serverデータベースに情報を記録するためにLog4Netを使用するWCFサービスがあります。Log4Net の GlobalContext を使用して、トランザクション名、ステータス、メッセージ、およびその他のいくつかの追加情報をログに記録します。このシステム内の重要なトランザクションには、読み取り、書き込み、およびログインがあります。

ログは次のようになります。

  • 「読み取り」 -------- 「成功」 -------- 「xxx 顧客データの読み取り」
  • 「書き込み」 -------- 「成功」 -------- 「xxx 顧客データの書き込み」
  • "ログイン" -------- "失敗" -------- "ユーザー セッションは既に存在します。"

通常のテストを実行すると、すべて正常に動作します。ログはデータベースに完全に書き込まれます。しかし、最近、JMeter を使用して負荷テストを行いました。上記の 3 つのトランザクションは、100 の同時スレッドで 3 分間テストされました。DB ログを確認したところ、一部の情報が誤って記録されていることがわかりました。

元:

  • "読み取り" -------- "成功" -------- "ユーザー セッションは既に存在します。"
  • "書き込み" -------- "成功" -------- "xxx 顧客データの読み取り"

これは、Log4Net GlobalContext がスレッドセーフではないという問題ですか? GlobalContext の代わりに ThreadContext を使用してみましたが、多くの情報がログに記録されていないようです。

4

1 に答える 1

0

LogicalThreadContext は私のためにトリックをしました!

于 2012-07-03T04:51:47.933 に答える