Настройка логов

Система поддерживает конфигурацию и отображение логов проекта Logback. Помимо стандартных параметров, таких как время сообщения, уровень логирования и т.д., система позволяет включить в логи следующие параметры:

  • requestId — уникальный идентификатор запроса; для внутренних запросов имеет значение no_id;
  • clientIp — IP-адрес отправителя запроса;
  • queryId — идентификатор запроса, полученного по HTTP;
  • subjectId — идентификатор пользователя-владельца предоставленного авторизационного токена (при использовании аутентификации запросов).

Отображение параметров Prostore в логах настраивается с помощью файла logback.xml. Инструкции и примеры настройки логов в JSON- и plain-форматах см. ниже.

Настройка логов в JSON-формате

Чтобы настроить отображение параметров Prostore в JSON-логах, отредактируйте файл logback.xml следующим образом (см. пример файла ниже):

  1. Перед объявлением appender добавьте строки:

     <conversionRule conversionWord="vcl"
                 converterClass="io.reactiverse.contextual.logging.LogbackConverter"/>
    
  2. В секцию 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 с включенным отображением всех доступных параметров Prostore в 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-формате

Чтобы настроить параметров Prostore в plain-логах, отредактируйте файл logback.xml следующим образом (см. пример файла ниже):

  1. Добавьте свойство с именем CONSOLE_LOG_PATTERN и значением, содержащим нужные идентификаторы.
  2. Перед объявлением appender добавьте строки:

     <conversionRule conversionWord="vcl"
                 converterClass="io.reactiverse.contextual.logging.LogbackConverter"/>
    
  3. Подключите appender, добавив строку:

     <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    

Ниже показан пример файла logback.xml с включенным отображением всех доступных параметров Prostore в 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>