Как использовать pid в качестве ключа для app4 log4j2 Kafka? - PullRequest
1 голос
/ 26 февраля 2020

Я пытаюсь отправить журналы в Kafka и хотел бы, чтобы в качестве ключа для сообщения журнала использовался идентификатор процесса.

Я обнаружил, что key в приложении Kafka поддерживает поиск. Но как я могу использовать pid в поле key так же, как я делал в PatternLayout.

<Appenders>
    <Console name="console" target="SYSTEM_OUT">
        <PatternLayout
            pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
    </Console>
    <Kafka name="Kafka" topic="my_log_topic" key="%processId">
        <PatternLayout pattern="[%-5level] %processId  %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
        <Property name="bootstrap.servers">127.0.0.1:9092</Property>
    </Kafka>
</Appenders>

Можем ли мы использовать шаблоны в поле key? Или есть какой-нибудь способ получить PID в поиске ?

1 Ответ

1 голос
/ 26 февраля 2020

Добавление следующей строки в main() работало нормально.

ProcessIdUtil находится в пакете org.apache.logging.log4j.util.

System.setProperty("pid", ProcessIdUtil.getProcessId());

и затем используется key="${sys:pid}"

<Kafka name="Kafka" topic="my_log_topic" key="${sys:pid}">
    <PatternLayout pattern="[%-5level] %processId  %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
    <Property name="bootstrap.servers">127.0.0.1:9092</Property>
</Kafka>

Есть ли лучший способ без изменения кода?

...