2012-06-01 58 views
1

我有一个WCF服务,我使用Log4Net将信息记录到Sql Server数据库。我使用Log4Net的GlobalContext来记录一些额外的信息,如事务名称,状态,消息和其他一些东西。该系统中的一些重要事务是读取,写入和登录。Log4Net记录不正确的数据

日志应该是这样的:

  • “读” -------- “成功” -------- “读XXX客户数据”
  • “写入” --------“成功”--------“写入xxx客户数据”
  • “登录”--------“失败”-------- “用户会话已经存在。”

当我运行我的正常测试 - 日志完全写入数据库时​​,一切正常。但是,最近我使用JMeter进行了负载测试。上述三个事务在100个并发线程中测试了3分钟。当我检查数据库日志时,发现有些信息记录不正确。

例:

  • “读” -------- “成功” -------- “用户会话已经存在。”
  • “写” -------- “成功” -------- “读XXX客户数据”

这是log4net的GlobalContext中不是线程安全的问题吗?我尝试使用ThreadContext而不是GlobalContext,但看起来像很多信息没有记录。

+0

看起来这些消息在写入数据库的过程中被混淆了,因为你并发地写入了数据库。您需要仔细查看调试器并检查整个链。 –

+0

根据文档,GlobalContext是线程安全的http://logging.apache.org/log4net/release/manual/contexts.html – VJAI

+0

@Mark:我已经看到了。但是,我面临的问题迫使我思考不同! – Thomas

回答

0

LogicalThreadContext为我做了诡计!