События системного журнала#
Сборка записей системного журнала осуществляется при помощи сервиса Logback (библиотеки логирования java-приложений). Настройка журналирования (Logback) и уровней логирования в частности осуществляется через редактирование файла logback.xml (подробности приведены в статье The logback manual). Настройка журналирования производится на этапе развертывания, как описано в разделе Настройка журналирования Руководства по установке.
Уровни логирования:
debug(отладочная информация)warn(предупреждение)error(ошибка)info(остальная информация)
Примечание
Уровень логированияdebugне рекомендуется включать в промышленной среде.
Примечание Значение по умолчанию местонахождения файла с событиями аудита и системным журналом определено в прилагаемой ниже конфигурации. По необходимости путь и название файлов могут быть переопределены в соответствии с конфигурациями ниже (путем определения дополнительных параметров запуска).
Базовый конфигурационный файл:
<?xml version="1.0" encoding="UTF-8"?>
<included>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<timestamp>eventdate</timestamp>
<message>source_message</message>
</fieldNames>
<customFields>
{"tier":"${TIER}", "app_id":"${APP_ID}"}
</customFields>
</encoder>
<file>${LOG_FILE}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>${LOG_FILE_MAX_SIZE:-10MB}</maxFileSize>
<maxHistory>${LOG_FILE_MAX_HISTORY:-0}</maxHistory>
</rollingPolicy>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</included>
Прикладной конфигурационный файл:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="APP_ID" value="swtr-core"/>
<property name="HOST_IP" value="${HOST_IP:-127.0.0.1}"/>
<property name="HOST_NAME" value="${HOST_NAME:-localhost}"/>
<property name="LOG_AUDIT_FILE" value="${LOG_AUDIT_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/audit.log}"/>
<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] [%mdc{id}]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<property name="FILE_LOG_PATTERN" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] [%mdc{id}] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<include resource="ru/sbt/swtr/track/core/base.xml"/>
<appender name="audit" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_AUDIT_FILE}</file>
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<timestamp>eventdate</timestamp>
<message>source_message</message>
</fieldNames>
<customFields>
{"tier":"${TIER}", "subsystem":"${APP_ID}", "host.ip":"${HOST_IP}", "host.name":"${HOST_NAME}"}
</customFields>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_AUDIT_FILE}.%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxFileSize>${LOG_AUDIT_FILE_MAX_SIZE:-10MB}</maxFileSize>
<maxHistory>${LOG_AUDIT_FILE_MAX_HISTORY:-0}</maxHistory>
</rollingPolicy>
</appender>
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springframework.security" level="INFO"/>
<logger name="ru.sbt.swtr.track.core" level="INFO"/>
<logger name="swtr-app-audit" level="INFO">
<appender-ref ref="audit"/>
</logger>
</configuration>
Пример записи лога уровня ERROR:
{"eventdate":"2023-08-24T10:22:44.050+03:00","@version":"1","source_message":"FATAL: remaining connection slots are reserved for non-replication superuser connections","logger_name":"org.hibernate.engine.jdbc.spi.SqlExceptionHelper","thread_name":"main","level":"ERROR","level_value":40000,"tier":"local","app_id":"swtr-core"}
Пример записи лога уровня WARN:
{"eventdate":"2023-08-24T10:22:44.050+03:00","@version":"1","source_message":"SQL Error: 0, SQLState: 53300","logger_name":"org.hibernate.engine.jdbc.spi.SqlExceptionHelper","thread_name":"main","level":"WARN","level_value":30000,"tier":"local","app_id":"swtr-core"}
{"eventdate":"2023-08-24T10:22:40.780+03:00","@version":"1","source_message":"HV000254: Missing parameter metadata for TimeUnit(String, int, long), which declares implicit or synthetic parameters. Automatic resolution of generic type information for method parameters may yield incorrect results if multiple parameters have the same erasure. To solve this, compile your code with the '-parameters' flag.","logger_name":"org.hibernate.validator.internal.properties.javabean.JavaBeanExecutable","thread_name":"main","level":"WARN","level_value":30000,"tier":"local","app_id":"swtr-core"}
Пример записи лога уровня INFO:
{"eventdate":"2023-08-24T10:22:42.002+03:00","@version":"1","source_message":"Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl","logger_name":"org.quartz.core.SchedulerSignalerImpl","thread_name":"main","level":"INFO","level_value":20000,"tier":"local","app_id":"swtr-core"}