Как проверить, что log4j2 регистрируется асинхронно через LMAX-разрушитель?
Я разрабатываю приложение RCP Eclipse и приложил некоторые усилия, чтобы заставить log4j2 работать в приложении. Теперь все работает нормально, и в качестве последнего штриха я хотел бы сделать всех логистов асинхронно.
Мне удалось получить LMAX Disruptor на пути к классам, и думаю, что я решил проблему предоставления sun.misc
. Задайте аргумент VM -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
в конфигурации запуска и правильно настройте файл log4j2.xml. Я думаю. И это где проблема. Я хотел бы иметь возможность проверить, что мое приложение регистрируется асинхронно, поэтому я могу пользоваться преимуществами латентности.
Как я могу - тогда - проверить, что мои регистраторы работают асинхронно, используя LMAX Dirsuptor в этом процессе?
Ответы
Ответ 1
Существует два типа асинхронного регистратора, обрабатываемых разными классами.
- Все регистраторы async: класс
AsyncLogger
- активируются при использовании AsyncLoggerContextSelector
- Смешивание синхронизации с асинхронными регистраторами: класс
AsyncLoggerConfig
- если ваш конфигурационный файл имеет <AsyncRoot>
или <AsyncLogger>
элементы, вложенные в конфигурацию для <Loggers>
.
В вашем случае вы делаете все асинхронные журналы, поэтому вы хотите поставить точку останова в AsyncLogger#logMessage(String, Level, Marker, Message, Throwable)
.
Другой способ проверить - установить <Configuration status="trace">
в верхней части конфигурационного файла. Это приведет к выходу внутренних сообщений журнала log4j на log4j. Вы должны увидеть что-то вроде "Запуск AsyncLogger disruptor...". Если вы видите, что все регистраторы являются асинхронными.
Ответ 2
Поместите точку останова в org.apache.logging.log4j.core.async.AsyncLoggerConfig#callAppenders
. Затем вы можете наблюдать, как событие помещается в разрушитель. Точно так же org.apache.logging.log4j.core.config.LoggerConfig#callAppenders
следует получать удар для синхронного ведения журнала ИЛИ получать удар с другой стороны разрушителя для асинхронного ведения журнала (в этот момент все снова синхронно).