2012-06-01 4 views
1

У меня есть служба WCF, где я использую Log4Net для регистрации информации в базе данных Sql Server. Я использую GlobalContext Log4Net для регистрации дополнительной информации, такой как имя транзакции, статус, сообщение и несколько других вещей. Некоторые важные транзакции в этой системе - чтение, запись и вход в систему.Log4Net регистрирует неверные данные

Журнал должен выглядеть следующим образом:

  • "Read" -------- "Success" -------- "Чтение данных клиентов ххх"
  • "Написать" -------- «Успех» -------- «Письменные данные ххх клиента»
  • «Вход» -------- «Отказ» -------- «Пользовательская сессия уже существует».

Все работает нормально, когда я запускаю свои обычные тесты - журналы записываются в базу данных отлично. Однако недавно я выполнил тест нагрузки с помощью JMeter. Вышеупомянутые три транзакции были протестированы в 100 параллельных потоков в течение 3 минут. Когда я проверил журналы БД, я обнаружил, что некоторая информация была зарегистрирована неправильно.

Ex:

  • "Read" -------- "Success" -------- "сессия пользователя уже существует."
  • «Написать» -------- «Success» -------- «Чтение данных ххх клиентов»

Является ли это проблемой с Log4Net GlobalContext не является поточно? Я попытался использовать ThreadContext вместо GlobalContext, но похоже, что большая часть информации не была зарегистрирована.

+0

Похоже, что сообщения были смешаны во время записи в db, потому что вы писали одновременно с db. Вам нужно поближе познакомиться с отладчиком и проверить всю цепочку. –

+0

GlobalContext является потокобезопасным в соответствии с документом http://logging.apache.org/log4net/release/manual/contexts.html – VJAI

+0

@Mark: Я это видел. Но проблема, с которой я сталкиваюсь, заставляет меня думать иначе! – Thomas

ответ

Смежные вопросы