У меня есть служба WCF, где я использую Log4Net для регистрации информации в базе данных Sql Server. Я использую GlobalContext Log4Net для регистрации дополнительной информации, такой как имя транзакции, статус, сообщение и несколько других вещей. Некоторые важные транзакции в этой системе - чтение, запись и вход в систему.Log4Net регистрирует неверные данные
Журнал должен выглядеть следующим образом:
- "Read" -------- "Success" -------- "Чтение данных клиентов ххх"
- "Написать" -------- «Успех» -------- «Письменные данные ххх клиента»
- «Вход» -------- «Отказ» -------- «Пользовательская сессия уже существует».
Все работает нормально, когда я запускаю свои обычные тесты - журналы записываются в базу данных отлично. Однако недавно я выполнил тест нагрузки с помощью JMeter. Вышеупомянутые три транзакции были протестированы в 100 параллельных потоков в течение 3 минут. Когда я проверил журналы БД, я обнаружил, что некоторая информация была зарегистрирована неправильно.
Ex:
- "Read" -------- "Success" -------- "сессия пользователя уже существует."
- «Написать» -------- «Success» -------- «Чтение данных ххх клиентов»
Является ли это проблемой с Log4Net GlobalContext не является поточно? Я попытался использовать ThreadContext вместо GlobalContext, но похоже, что большая часть информации не была зарегистрирована.
Похоже, что сообщения были смешаны во время записи в db, потому что вы писали одновременно с db. Вам нужно поближе познакомиться с отладчиком и проверить всю цепочку. –
GlobalContext является потокобезопасным в соответствии с документом http://logging.apache.org/log4net/release/manual/contexts.html – VJAI
@Mark: Я это видел. Но проблема, с которой я сталкиваюсь, заставляет меня думать иначе! – Thomas