Sql Serverデータベースに情報を記録するためにLog4Netを使用するWCFサービスがあります。Log4Net の GlobalContext を使用して、トランザクション名、ステータス、メッセージ、およびその他のいくつかの追加情報をログに記録します。このシステム内の重要なトランザクションには、読み取り、書き込み、およびログインがあります。
ログは次のようになります。
- 「読み取り」 -------- 「成功」 -------- 「xxx 顧客データの読み取り」
- 「書き込み」 -------- 「成功」 -------- 「xxx 顧客データの書き込み」
- "ログイン" -------- "失敗" -------- "ユーザー セッションは既に存在します。"
通常のテストを実行すると、すべて正常に動作します。ログはデータベースに完全に書き込まれます。しかし、最近、JMeter を使用して負荷テストを行いました。上記の 3 つのトランザクションは、100 の同時スレッドで 3 分間テストされました。DB ログを確認したところ、一部の情報が誤って記録されていることがわかりました。
元:
- "読み取り" -------- "成功" -------- "ユーザー セッションは既に存在します。"
- "書き込み" -------- "成功" -------- "xxx 顧客データの読み取り"
これは、Log4Net GlobalContext がスレッドセーフではないという問題ですか? GlobalContext の代わりに ThreadContext を使用してみましたが、多くの情報がログに記録されていないようです。