Я изучаю Log4j 2.14.0 и SLF4j 2.0 и пытаюсь создавать структурированные сообщения.

У меня настроен Appender с немного измененным LogstashJsonEventLayoutV1.json,

<JsonTemplateLayout eventTemplateUri="classpath:LogstashJsonEventLayoutV1-test.json" properties="true" />

Где я удалил метку времени и имя хоста (я делаю это как часть модульного теста) и изменил конфигурацию для «сообщения» следующим образом:

"message": {
        "$resolver": "message",
        "fallbackKey": "formattedMessage"}

Когда я что-то записываю

log4jLogger.atInfo().log(new MapMessage(Map.of("hello", "world")));

Очевидно, он генерирует сообщения журнала JSONified:

{"@version":1,"message":{"hello":"world"},"thread_name":"Test worker","level":"INFO","logger_name":"java.lang.Integer"}

В производстве мой магазин обычно использует Log4J через SLF4J. Я бы хотел использовать версию SLF4J 2.0.0-alpha1 для достижения этой цели. Как мне добиться того же с помощью свободного API SLF4J через addKeyValue?

logger.atDebug().addKeyValue("oldT", oldT).addKeyValue("newT", newT).log("Temperature changed.");
0
Michael Kohout 4 Дек 2020 в 06:28

1 ответ

Лучший ответ

В конце дня я просто обернул log4j - для этого случая использования не было никакой манны для обертывания Slf4j, когда я мог просто нацелить log4j.

0
Michael Kohout 1 Янв 2021 в 04:39