Логирование
Kora использует slf4j-api как движок для логирования в рамках всего фреймворка, предполагается что будет использоваться реализация на основе Logback.
Если нужен пошаговый разбор перед справочным описанием, смотрите Наблюдаемость.
Использование¶
Логеры требуется предоставлять посредствам фабрики SLF4J.
Конфигурация¶
Уровни логирования описанные в классе LoggingConfig:
Параметры конфигурации сбора логов описываются в модулях в которых присутствует сбор логов, например HTTP сервер, HTTP клиент и т.д.
Модули¶
Включение и выключение логирования определенных модулей указывается в конфигурации самих модулей.
По умолчанию логирование всех модулей выключено, по этому для удобства тут указана отдельно конфигурация для включения логирования большинства модулей.
db.telemetry.logging.enabled = true //(1)!
cassandra.telemetry.logging.enabled = true //(2)!
grpcServer.telemetry.logging.enabled = true //(3)!
httpServer.telemetry.logging.enabled = true //(4)!
scheduling.telemetry.logging.enabled = true //(5)!
grpcClient.ИмяСервисаGrpc.telemetry.logging.enabled = true //(6)!
soapClient.ИмяСервисаSoap.telemetry.logging.enabled = true //(7)!
ПутьДоКонфигурацииHttpКлиента.telemetry.logging.enabled = true //(8)!
ПутьДоКонфигурацииKafkaПотребителя.telemetry.logging.enabled = true //(9)!
ПутьДоКонфигурацииKafkaПродюсера.telemetry.logging.enabled = true //(10)!
- База данных JDBC / R2DBC / Vertx
- База данных Cassandra
- gRPC сервер
- HTTP сервер
- Планировщик
- gRPC клиент (Указывается для конкретного сервиса)
- SOAP клиент (Указывается для конкретного сервиса)
- HTTP клиент (Указывается для конкретного клиента)
- Kafka потребитель (Указывается для конкретного потребителя)
- Kafka продюсер (Указывается для конкретного продюсера)
db.telemetry.logging.enabled: true #(1)!
cassandra.telemetry.logging.enabled: true #(2)!
grpcServer.telemetry.logging.enabled: true #(3)!
httpServer.telemetry.logging.enabled: true #(4)!
scheduling.telemetry.logging.enabled: true #(5)!
grpcClient.ИмяСервисаGrpc.telemetry.logging.enabled: true #(6)!
soapClient.ИмяСервисаSoap.telemetry.logging.enabled: true #(7)!
ПутьДоКонфигурацииHttpКлиента.telemetry.logging.enabled: true #(8)!
ПутьДоКонфигурацииKafkaПотребителя.telemetry.logging.enabled: true #(9)!
ПутьДоКонфигурацииKafkaПродюсера.telemetry.logging.enabled: true #(10)!
- База данных JDBC / R2DBC / Vertx
- База данных Cassandra
- gRPC сервер
- HTTP сервер
- Планировщик
- gRPC клиент (Указывается для конкретного сервиса)
- SOAP клиент (Указывается для конкретного сервиса)
- HTTP клиент (Указывается для конкретного клиента)
- Kafka потребитель (Указывается для конкретного потребителя)
- Kafka продюсер (Указывается для конкретного продюсера)
Logback¶
Модуль предоставляет реализацию логирования на основе Logback, добавляет поддержку структурированных логов и возможность конфигурации уровней логирования через файл конфигурации.
Подключение¶
Зависимость build.gradle:
Модуль:
Зависимость build.gradle.kts:
Модуль:
Конфигурация¶
Предполагается что настраиваться Logback будет через logback.xml, а в конфигурации Kora указываться будут лишь уровни логирования, пример logback.xml:
<configuration debug="false">
<statusListener class="ch.qos.logback.core.status.NopStatusListener" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ru.tinkoff.kora.logging.logback.ConsoleTextRecordEncoder"/>
</appender>
<appender name="ASYNC" class="ru.tinkoff.kora.logging.logback.KoraAsyncAppender">
<appender-ref ref="STDOUT"/>
</appender>
<root level="WARN">
<appender-ref ref="ASYNC"/>
</root>
</configuration>
Другая реализация¶
Kora использует slf4j-api как движок для логирования, можно подключить свою любую совместимую реализацию. Базовый модуль добавляет поддержку структурированных логов и возможность конфигурации уровней логирования через файл конфигурации.
Подключение¶
Потребуется подключить общую реализацию логирования:
Зависимость build.gradle:
Модуль:
Зависимость build.gradle.kts:
Модуль:
Использование¶
При использовании собственной реализации потребуется предоставить реализацию LoggingLevelApplier который бы реализовывал
установление уровня логирование и его сброс.
Также потребуется в реализации самостоятельно поддержать запись StructuredArgument, StructuredArgumentWriter и MDC если они будут использоваться.
Структурированные логи¶
Передать структурированные данные в запись лога можно двумя способами через:
- Маркер
- Параметр
Методы маркера и параметра также принимают в качестве аргументов Long, Integer, String, Boolean и Map<String, String>.
Маркер¶
Передать структурированные данные в лог можно через маркер:
Параметр¶
Передать структурированные данные в лог можно через параметры:
MDC¶
Структурные данные можно прикреплять ко всем записям в рамках контекста с помощью класса ru.tinkoff.kora.logging.common.MDC:
Если вы используете AsyncAppender для отправки логов, то для корректной передачи MDC параметров нужно воспользоваться ru.tinkoff.kora.logging.logback.KoraAsyncAppender,
который передаст делегату ru.tinkoff.kora.logging.logback.KoraLoggingEvent, содержащий, в том числе структурный MDC.