Логирование
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.