Skip to content

Commit 187e4ef

Browse files
committed
Add ReadMe.md
1 parent 80ec045 commit 187e4ef

File tree

1 file changed

+166
-0
lines changed

1 file changed

+166
-0
lines changed

Spring_part_7/ReadMe.md

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,166 @@
1+
### Spring (Boot) lessons part 7 - [Логирование](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.logging)
2+
3+
В [папке DOC](https://github.com/JcoderPaul/Spring_Framework_Lessons/tree/master/Spring_part_7/DOC) sql-скрипты и др. полезные файлы.
4+
5+
Док. для изучения:
6+
- [Simple Logging Facade for Java (SLF4J)](https://www.slf4j.org/) ;
7+
- [SLF4J user manual](https://www.slf4j.org/manual.html) ;
8+
________________________________________________________________________________________________________________________
9+
- [Spring Boot Reference Documentation](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/) ;
10+
- [Spring Framework 6.1.5 Documentation](https://spring.io/projects/spring-framework) ;
11+
- [Spring Framework 3.2.x Reference Documentation](https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/index.html) ;
12+
- [Getting Started Guides](https://spring.io/guides) ;
13+
- [Developing with Spring Boot](https://docs.spring.io/spring-boot/docs/current/reference/html/using.html) ;
14+
________________________________________________________________________________________________________________________
15+
- [Архив Spring-Boot Docs](https://docs.spring.io/spring-boot/docs/) ;
16+
- [Архив Spring-Framework Docs](https://docs.spring.io/spring-framework/docs/) ;
17+
18+
________________________________________________________________________________________________________________________
19+
Для начала проведем предварительную подготовку:
20+
21+
Шаг 1. - в файле [build.gradle](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/build.gradle) добавим необходимые plugin-ы:
22+
23+
/*
24+
Плагин Spring Boot он добавляет необходимые задачи в Gradle
25+
и имеет обширную взаимосвязь с другими plugin-ами.
26+
*/
27+
id 'org.springframework.boot' version '3.1.3'
28+
/*
29+
Менеджер зависимостей позволяет решать проблемы несовместимости
30+
различных версий и модулей Spring-а
31+
*/
32+
id "io.spring.dependency-management" version '1.0.11.RELEASE'
33+
/* Подключим Lombok */
34+
id "io.freefair.lombok" version "8.3"
35+
36+
Шаг 2. - подключаем Spring Boot:
37+
38+
/*
39+
Подключим Spring Boot Starter он включает поддержку
40+
авто-конфигурации, логирование и YAML
41+
*/
42+
implementation 'org.springframework.boot:spring-boot-starter'
43+
44+
________________________________________________________________________________________________________________________
45+
#### Lesson 31 - Logging Starter.
46+
47+
Java имеет массу фреймворков [для логирования](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.logging) см. [DOC/Logging_System.jpg](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/Logging_System.jpg):
48+
- [Log4J](https://logging.apache.org/log4j/2.x/) ;
49+
- [Jdk14l](https://docs.oracle.com/en/java/javase/17/docs/api/java.logging/java/util/logging/package-summary.html) ;
50+
- [LogBack](https://logback.qos.ch/) ;
51+
52+
Обычно в Spring есть выбор, но по умолчанию используется Logback. Однако для взаимодействия с системами логирования
53+
используется slf4j API ([набор интерфейсов и классов](https://www.slf4j.org/api/)). Так же, для большинства логеров, нужен binding - адаптер,
54+
описывающий, как нам передавать информацию из нашего приложения через API в конкретный логер.
55+
56+
И только для Logback адаптер не требуется, еще раз см. [DOC/Logging_System.jpg](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/Logging_System.jpg). В Spring есть стартер для системы
57+
логирования logback - '[spring-boot-starter-logging](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.starters)', он подхватывается автоматически (как транзитивная зависимость)
58+
при добавлении Spring Boot стартера. Мы легко можем поменять (отключить) систему логирования на другую (исключив
59+
одну и подключив другую):
60+
61+
implementation ('org.springframework.boot:spring-boot-starter'){
62+
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
63+
}
64+
implementation 'org.springframework.boot:spring-boot-starter-log4j2'
65+
66+
Уровни логирования имеют приоритет и отображение их идет от худшего к менее критичному, т.е. если мы настроили
67+
систему логирования на запись только FATAL ситуаций, то только они и будут фиксироваться, если же, например, на
68+
ERROR (см. [DOC/Log_Level.jpg](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/Log_Level.jpg)), то теперь будут записываться уже и FATAL и ERROR. И так далее по иерархии вниз до
69+
TRACE (пишем абсолютно все уровни логирования).
70+
71+
Подключить систему логирования к классу просто, например, используя аннотацию [@Slf4j](https://projectlombok.org/api/lombok/extern/slf4j/Slf4j) над всем классом. А сервисные
72+
сообщения можно передавать в логер (см. [JpaConfiguration.java](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/src/main/java/spring/oldboy/config/JpaConfiguration.java)):
73+
74+
log.info("Jpa configuration is enabled");
75+
76+
Мы используем именно эту аннотацию, чтобы не привязываться к конкретной реализации логера, т.е. использование
77+
[slf4j API](https://www.slf4j.org/) позволяет поставлять любую систему журналирования процессов динамически.
78+
79+
Простые примеры использования аннотации [@Slf4j](https://projectlombok.org/api/lombok/extern/slf4j/Slf4j) и ее методов
80+
для логирования событий приложения:
81+
- [ConnectionPool.java](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/src/main/java/spring/oldboy/pool/ConnectionPool.java);
82+
- [CompanyRepository.java](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/src/main/java/spring/oldboy/repository/CompanyRepository.java);
83+
84+
Док. для изучения:
85+
- [Spring Boot features 2.1.13.RELEASE (Logging)](https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/html/boot-features-logging.html) ;
86+
- [Spring Boot features 3.3.* (Logging)](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.logging) ;
87+
88+
________________________________________________________________________________________________________________________
89+
#### Lesson 32 - Logback Configuration.
90+
91+
Конфигурировать логер в нашем Spring Boot, на верхнем уровне, достаточно просто, можно использовать [application.yml](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/src/main/resources/application.yml) (выгрузка событий происходит и в консоль, и [в файл](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/Logs/oldboy.log)):
92+
93+
logging:
94+
# Зададим уровень логирования корневого логера
95+
level:
96+
# Будем фиксировать сообщения типа WARN и все что выше (ERROR и FATAL)
97+
root: WARN
98+
spring.oldboy.pool: INFO
99+
# Записываем лог в файл
100+
file.name: Logs/oldboy.log
101+
102+
Основные default настройки Spring Boot находятся в *.XML файлах самого Spring пакета см.
103+
[DOC/Logback_base_etc_XML.jpg](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/Logback_base_etc_XML.jpg) (или саму структуру jar файла), но мы можем создавать свои файлы конфигурации.
104+
105+
Внутренняя структура [base.xml](https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/base.xml) для примера:
106+
107+
<included>
108+
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
109+
<property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
110+
<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
111+
<include resource="org/springframework/boot/logging/logback/file-appender.xml" />
112+
<root level="INFO">
113+
<appender-ref ref="CONSOLE" />
114+
<appender-ref ref="FILE" />
115+
</root>
116+
</included>
117+
118+
Во всех системах логирования есть два основных понятия (см. код выше):
119+
- appender-ы - куда мы выгружаем наши логи (событийные данные), т.е. конкретный 'потребитель' (консоль - [console-appender.xml](https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/console-appender.xml),
120+
файл - [file-appender.xml](https://github.com/spring-projects/spring-boot/blob/main/spring-boot-project/spring-boot/src/main/resources/org/springframework/boot/logging/logback/file-appender.xml), БД, удаленный сервер);
121+
- logger-ы - те кто выгружают данные в указанные appender-ы (причем логеры могут поставлять данные во
122+
все appender-ы сразу и в консоль, и в файл и ...);
123+
124+
Более подробно об этом можно прочитать в переводных статьях по логированию (конфигурированию логеров) в
125+
Spring приложениях с использованием Logback (данные местами устаревшие, но раскрывающие логику
126+
происходящего):
127+
128+
- [DOC/ArticlesAboutLogging/YAML_SpringBoot_Config_Logback.txt](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/ArticlesAboutLogging/YAML_SpringBoot_Config_Logback.txt) - описание настройки *.yaml файлов для
129+
конфигурирования Spring Boot Logging;
130+
- [DOC/ArticlesAboutLogging/LoggingBegin.txt](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/ArticlesAboutLogging/LoggingBegin.txt) - описание принципов работы логеров в Spring Boot;
131+
- [DOC/ArticlesAboutLogging/LoggingWithXML.txt](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/ArticlesAboutLogging/LoggingWithXML.txt) - конфигурирование Logback при помощи *.XML файлов;
132+
- [DOC/ArticlesAboutLogging/LogbackWithSpringBoot.txt](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/ArticlesAboutLogging/LogbackWithSpringBoot.txt) - применение Logback в Spring приложениях;
133+
134+
Как описано в статьях, если мы захотим полностью переписать (максимально кастомизировать) настройки
135+
по логированию нашего приложения нам придется создать файлы свойств и настроек в одном из удобных для
136+
нас форматах XML, YML, Groovy.
137+
138+
См. официальную документацию:
139+
- [Spring Boot Logging](https://docs.spring.io/spring-boot/docs/3.3.x/reference/htmlsingle/#features.logging) ;
140+
- [Spring Boot Custom Log Configuration](https://docs.spring.io/spring-boot/docs/3.1.3/reference/htmlsingle/#features.logging.custom-log-configuration) ;
141+
142+
И конечно для работы с Logback и slf4j API:
143+
- [SLF4J USER MANUAL](https://www.slf4j.org/manual.html) ;
144+
- [Logback Project](https://logback.qos.ch/index.html) ;
145+
- [The logback manual](https://logback.qos.ch/manual/index.html) ;
146+
- [Logback configuration](https://logback.qos.ch/manual/configuration.html) ;
147+
148+
Мы можем использовать для [Logback](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.logging.logback), как и описано в документации зарезервированные названия XML файлов, например
149+
logback-spring.xml (для просмотра переименовали в [logback_spring_demo.xml](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/src/main/resources/logback_spring_demo.xml)) и прописать там все наши
150+
демонстрационные настройки (взятые из документации по Logback, как пример).
151+
152+
И это работает для любой системы логирования см. [DOC/Logging_System.jpg](https://github.com/JcoderPaul/Spring_Framework_Lessons/blob/master/Spring_part_7/DOC/Logging_System.jpg).
153+
154+
________________________________________________________________________________________________________________________
155+
См. официальные [Guides](https://spring.io/guides):
156+
- [Getting Started Guides](https://spring.io/guides) - Эти руководства, рассчитанные на 15–30 минут, содержат быстрые
157+
практические инструкции по созданию «Hello World» для любой задачи разработки с помощью Spring. В большинстве случаев
158+
единственными необходимыми требованиями являются JDK и текстовый редактор.
159+
- [Topical Guides](https://spring.io/guides#topicals) - Тематические руководства предназначенные для прочтения и
160+
понимания за час или меньше, содержит более широкий или субъективный контент, чем руководство по началу работы.
161+
- [Tutorials](https://spring.io/guides#tutorials) - Эти учебники, рассчитанные на 2–3 часа, обеспечивают более глубокое
162+
контекстное изучение тем разработки корпоративных приложений, что позволяет вам подготовиться к внедрению реальных
163+
решений.
164+
________________________________________________________________________________________________________________________
165+
- [Spring Projects на GitHub](https://github.com/spring-projects) ;
166+
________________________________________________________________________________________________________________________

0 commit comments

Comments
 (0)