Я написал несколько модульных тестов, чтобы воспроизвести проблему: тест создает 50 потоков, и каждый поток регистрирует 500 сообщений. После этого письменные строки были подсчитаны, и в результате я получил 25 000 (50 x 500) строк в другом порядке. Я проверил его на двухъядерном и восьмиядерном компьютере.
Я тестировал статический регистратор:
private static ILog StaticLog = log4net.LogManager.GetLogger(RepositoryName, "Static logger");
и с регистратором для каждого экземпляра тестового класса / потока:
ILog instanceLog = LogManager.GetLogger(RepositoryName, "Instance logger: " + ThreadId.ToString());
И все тесты были зелеными.
Таким образом, Log4Net работает отлично и хорошо справляется со сценариями многопоточности. Документы Appender следует обновить и указать, что многопоточные операции поддерживаются, если Logger API используется правильно.
Я предполагаю, что проблема с отсутствующими записями журнала, с которыми мы столкнулись на компьютере клиента, вызвана другими проблемами. Возможно, основная виртуальная машина или оборудование сломаны.
Спасибо за вашу помощь!