Настройка отображения логов
Система поддерживает конфигурацию и отображение логов проекта Logback. Помимо стандартных параметров, таких как время сообщения, уровень логирования и т.д., система позволяет отображать в логах следующие параметры:
requestId
— уникальный идентификатор запроса; для внутренних запросов имеет значениеno_id
;clientIp
— IP-адрес отправителя запроса;queryId
— идентификатор запроса, полученного по REST API;subjectId
— идентификатор пользователя-владельца предоставленного авторизационного токена (при использовании аутентификации запросов).
Отображение идентификаторов запросов и пользователей в логах настраивается в файле logback.xml. Инструкции и примеры настройки для логов в JSON- и plain-форматах см. ниже.
Настройка логов в JSON-формате
Чтобы настроить отображение идентификаторов запросов и пользователей в JSON-логах, отредактируйте файл logback.xml следующим образом (см. пример файла ниже):
-
Перед объявлением
appender
добавьте строки:<conversionRule conversionWord="vcl" converterClass="io.reactiverse.contextual.logging.LogbackConverter"/>
-
В секцию
appender.providers.pattern
добавьте строки:"requestId": "%vcl{requestId:-no_id}", "clientIp": "%vcl{clientIp:-no_id}", "queryId": "%vcl{queryId:-no_id}", "subjectId": "%vcl{subjectId:-no_id}"
Ниже показан пример файла logback.xml с включенным отображением идентификаторов запросов и пользователей для логов в JSON-формате:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<conversionRule conversionWord="vcl"
converterClass="io.reactiverse.contextual.logging.LogbackConverter"/>
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>logs/application.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>7</maxHistory>
<totalSizeCap>3GB</totalSizeCap>
</rollingPolicy>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<pattern>
<omitEmptyFields>true</omitEmptyFields>
<pattern>
{
"timestamp": "%date{ISO8601}",
"logger": "%logger",
"level": "%level",
"thread": "%thread",
"requestId": "%vcl{requestId:-no_id}",
"clientIp": "%vcl{clientIp:-no_id}",
"queryId": "%vcl{queryId:-no_id}",
"subjectId": "%vcl{subjectId:-no_id}",
"message": "%message"
}
</pattern>
</pattern>
<stackTrace>
<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
<maxDepthPerThrowable>30</maxDepthPerThrowable>
<maxLength>2048</maxLength>
<shortenedClassNameLength>20</shortenedClassNameLength>
<exclude>^sun\.reflect\..*\.invoke</exclude>
<exclude>^net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
<rootCauseFirst>true</rootCauseFirst>
</throwableConverter>
</stackTrace>
</providers>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="rollingFile" />
</root>
</configuration>
Настройка логов в plain-формате
Чтобы настроить отображение идентификаторов запросов и пользователей в plain-логах, отредактируйте файл logback.xml следующим образом (см. пример файла ниже):
- Добавьте свойство с именем
CONSOLE_LOG_PATTERN
и значением, содержащим нужные идентификаторы. -
Перед объявлением
appender
добавьте строки:<conversionRule conversionWord="vcl" converterClass="io.reactiverse.contextual.logging.LogbackConverter"/>
-
Подключите
appender
, добавив строку:<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
Ниже показан пример файла logback.xml с включенным отображением идентификаторов запросов и пользователей для логов в plain-формате:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="CONSOLE_LOG_PATTERN"
value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} [%vcl{requestId:-no_id}] [%vcl{queryId:-no_id}] [%vcl{subjectId:-no_id}] [%vcl{clientIp:-no_id}] %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<conversionRule conversionWord="vcl"
converterClass="io.reactiverse.contextual.logging.LogbackConverter"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
<logger name="ru.datamart.prostore" level="TRACE"/>
</configuration>