Как включить идентификатор процесса в log4j2 JSONLayout? - PullRequest
0 голосов
/ 04 марта 2020

Используя log4j2, с обычным текстовым PatternLayout, я мог бы включить «$ {hostName}% pid» для отображения имени хоста и идентификатора процесса в сообщениях журнала.

Использование JSONLayout для сбора сообщений в JSON объектах, Я мог только заставить имя хоста работать, как показано ниже:

        <JSONLayout complete="true" compact="true" eventEol="true"
                objectMessageAsJsonObject="true" locationInfo="true">
            <KeyValuePair key="hostname" value="$${env:hostName}" />
        </JSONLayout>

Пробовал много разных способов, но не мог заставить pid показываться. Любые предложения, без написания какого-либо настроенного кода? Спасибо!

1 Ответ

0 голосов
/ 05 марта 2020

Отладка исходного кода log4j2 версии 2.12.1, и в настоящее время это невозможно.

Простой PatternLayout использует LogEventPatternConverter для преобразования каждого шаблона, для идентификатора процесса он использует ProcessIdPatternConverter.

Но JSONLayout использовал совершенно другой подход. Он использует набор реализаций AbstractLookup, таких как EnvironmentLookup для «env», ContextMapLookup для «ctx». Идентификатор процесса не отображается ни в одном из текущих классов поиска.

Две реализации макета ничего не разделили. В идеале низкоуровневый код должен использоваться совместно, а шаблоны, поддерживаемые в одном макете, должны быть доступны в другом.

...