Как проверить, что 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 следует получать удар для синхронного ведения журнала ИЛИ получать удар с другой стороны разрушителя для асинхронного ведения журнала (в этот момент все снова синхронно).