我有一个 WCF 服务,其中我使用 Log4Net 将信息记录到 Sql Server 数据库。我使用 Log4Net 的 GlobalContext 来记录一些额外的信息,比如事务名称、状态、消息和其他一些东西。该系统中的一些重要事务是读取、写入和登录。
日志应如下所示:
- “读取” -------- “成功” -------- “读取 xxx 客户数据”
- “写入” -------- “成功” -------- “写入 xxx 客户的数据”
- “登录”--------“失败”--------“用户会话已存在。”
当我运行正常测试时,一切正常 - 日志完美地写入数据库。但是,最近我使用 JMeter 进行了负载测试。上面提到的三个事务在 100 个并发线程中测试了 3 分钟。当我检查数据库日志时,我发现有些信息被错误地记录了。
前任:
- “读取”--------“成功”--------“用户会话已存在。”
- “写入” -------- “成功” -------- “读取 xxx 客户数据”
这是 Log4Net GlobalContext 不是线程安全的问题吗?我尝试使用 ThreadContext 而不是 GlobalContext,但看起来很多信息没有被记录。