Skip to content

Latest commit

 

History

History

Spring_part_7

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Spring (Boot) lessons part 7 - Логирование

В папке DOC sql-скрипты и др. полезные файлы.

Док. для изучения:




Для начала проведем предварительную подготовку:

Шаг 1. - в файле build.gradle добавим необходимые plugin-ы:

/* 
   Плагин Spring Boot он добавляет необходимые задачи в Gradle 
   и имеет обширную взаимосвязь с другими plugin-ами.
*/
id 'org.springframework.boot' version '3.1.3'
/* 
   Менеджер зависимостей позволяет решать проблемы несовместимости 
   различных версий и модулей Spring-а
*/
id "io.spring.dependency-management" version '1.0.11.RELEASE'
/* Подключим Lombok */
id "io.freefair.lombok" version "8.3"

Шаг 2. - подключаем Spring Boot:

/* 
   Подключим Spring Boot Starter он включает поддержку 
   авто-конфигурации, логирование и YAML
*/
implementation 'org.springframework.boot:spring-boot-starter'

Lesson 31 - Logging Starter.

Java имеет массу фреймворков для логирования см. DOC/Logging_System.jpg:

Обычно в Spring есть выбор, но по умолчанию используется Logback. Однако для взаимодействия с системами логирования используется slf4j API (набор интерфейсов и классов). Так же, для большинства логеров, нужен binding - адаптер, описывающий, как нам передавать информацию из нашего приложения через API в конкретный логер.

И только для Logback адаптер не требуется, еще раз см. DOC/Logging_System.jpg. В Spring есть стартер для системы логирования logback - 'spring-boot-starter-logging', он подхватывается автоматически (как транзитивная зависимость) при добавлении Spring Boot стартера. Мы легко можем поменять (отключить) систему логирования на другую (исключив одну и подключив другую):

implementation ('org.springframework.boot:spring-boot-starter'){
    exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
implementation 'org.springframework.boot:spring-boot-starter-log4j2'

Уровни логирования имеют приоритет и отображение их идет от худшего к менее критичному, т.е. если мы настроили систему логирования на запись только FATAL ситуаций, то только они и будут фиксироваться, если же, например, на ERROR (см. DOC/Log_Level.jpg), то теперь будут записываться уже и FATAL и ERROR. И так далее по иерархии вниз до TRACE (пишем абсолютно все уровни логирования).

Подключить систему логирования к классу просто, например, используя аннотацию @Slf4j над всем классом. А сервисные сообщения можно передавать в логер (см. JpaConfiguration.java):

log.info("Jpa configuration is enabled");

Мы используем именно эту аннотацию, чтобы не привязываться к конкретной реализации логера, т.е. использование slf4j API позволяет поставлять любую систему журналирования процессов динамически.

Простые примеры использования аннотации @Slf4j и ее методов для логирования событий приложения:

Док. для изучения:


Lesson 32 - Logback Configuration.

Конфигурировать логер в нашем Spring Boot, на верхнем уровне, достаточно просто, можно использовать application.yml (выгрузка событий происходит и в консоль, и в файл):

logging:
# Зададим уровень логирования корневого логера
    level:
    # Будем фиксировать сообщения типа WARN и все что выше (ERROR и FATAL)
        root: WARN
        spring.oldboy.pool: INFO
    # Записываем лог в файл
    file.name: Logs/oldboy.log

Основные default настройки Spring Boot находятся в *.XML файлах самого Spring пакета см. DOC/Logback_base_etc_XML.jpg (или саму структуру jar файла), но мы можем создавать свои файлы конфигурации.

Внутренняя структура base.xml для примера:

<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" />
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</included>

Во всех системах логирования есть два основных понятия (см. код выше):

  • appender-ы - куда мы выгружаем наши логи (событийные данные), т.е. конкретный 'потребитель' (консоль - console-appender.xml, файл - file-appender.xml, БД, удаленный сервер);
  • logger-ы - те кто выгружают данные в указанные appender-ы (причем логеры могут поставлять данные во все appender-ы сразу и в консоль, и в файл и ...);

Более подробно об этом можно прочитать в переводных статьях по логированию (конфигурированию логеров) в Spring приложениях с использованием Logback (данные местами устаревшие, но раскрывающие логику происходящего):

Как описано в статьях, если мы захотим полностью переписать (максимально кастомизировать) настройки по логированию нашего приложения нам придется создать файлы свойств и настроек в одном из удобных для нас форматах XML, YML, Groovy.

См. официальную документацию:

И конечно для работы с Logback и slf4j API:

Мы можем использовать для Logback, как и описано в документации зарезервированные названия XML файлов, например logback-spring.xml (для просмотра переименовали в logback_spring_demo.xml) и прописать там все наши демонстрационные настройки (взятые из документации по Logback, как пример).

И это работает для любой системы логирования см. DOC/Logging_System.jpg.


См. официальные Guides:

  • Getting Started Guides - Эти руководства, рассчитанные на 15–30 минут, содержат быстрые практические инструкции по созданию «Hello World» для любой задачи разработки с помощью Spring. В большинстве случаев единственными необходимыми требованиями являются JDK и текстовый редактор.
  • Topical Guides - Тематические руководства предназначенные для прочтения и понимания за час или меньше, содержит более широкий или субъективный контент, чем руководство по началу работы.
  • Tutorials - Эти учебники, рассчитанные на 2–3 часа, обеспечивают более глубокое контекстное изучение тем разработки корпоративных приложений, что позволяет вам подготовиться к внедрению реальных решений.