И снова поговорим о логах.
В реальном мире логи могут включать:
- Перехват ошибок и исключений.
- Запись ключевых операций, например, завершение транзакций.
- Отслеживание активности пользователей.
- Анализ производительности через временные метки и детали запросов.
Совмещение логирования и Actuator позволяет получить не только данные о текущем состоянии приложения, но и историческую информацию для анализа, что делает систему максимально прозрачной.
Включение логирования через Actuator
Spring Boot Actuator обеспечивает удобный интерфейс для взаимодействия с логами вашего приложения. Это делается через эндпоинт /actuator/loggers. С его помощью вы можете посмотреть текущие настройки логирования или даже изменить уровень логирования на лету!
Добавляем зависимости
Для начала, убедитесь, что в вашем проекте подключены необходимые зависимости. Добавьте Actuator, если вы этого ещё не сделали:
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
build.gradle:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
Настройка логирования
Spring Boot Actuator позволяет управлять логированием через файл конфигурации application.properties или application.yml. Например, вы можете включить эндпоинт /loggers с помощью следующей строки:
management.endpoints.web.exposure.include=loggers
Этот параметр делает эндпоинт доступным для запросов. Вы можете проверить список всех зарегистрированных логгеров или изменить их уровень логирования на ходу.
Что показывает эндпоинт /actuator/loggers?
Когда вы откроете URL /actuator/loggers, вы увидите JSON-объект, содержащий информацию о всех зарегистрированных логгерах Spring.
Пример структуры JSON:
{
"levels": ["OFF", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"],
"loggers": {
"ROOT": {
"configuredLevel": "INFO",
"effectiveLevel": "INFO"
},
"com.example.myapp": {
"configuredLevel": "DEBUG",
"effectiveLevel": "DEBUG"
}
}
}
Здесь:
levels— допустимые уровни логирования.loggers— текущие логгеры с их настройками. ЛоггерROOTприменяется ко всему приложению, если другое не указано явно.
Изменение уровня логирования
Вы можете динамически менять уровень логирования для любого компонента приложения через API. Например, чтобы изменить уровень логирования для пакета com.example.myapp на TRACE, выполните HTTP-запрос:
PUT-запрос:
PUT /actuator/loggers/com.example.myapp
Content-Type: application/json
{
"configuredLevel": "TRACE"
}
Убедитесь, что изменения применились, через GET /actuator/loggers/com.example.myapp.
Настройка уровня логирования
Логирование в Spring Boot базируется на популярных библиотеках логирования, таких как Logback, Log4j и Java Util Logging. Давайте посмотрим, как можно настроить логирование для различных компонентов приложения.
Пример application.properties:
# Уровень логирования по умолчанию
logging.level.root=INFO
# Уровень логирования для собственного пакета
logging.level.com.example.myapp=DEBUG
# Логирование SQL-запросов (если используется JPA)
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
Эти уровни логирования можно модифицировать через /actuator/loggers.
Практика: Логирование контроллеров
Давайте рассмотрим практический сценарий: добавим несколько логов в наш учебный проект и отследим их через Actuator.
Пример контроллера с логами
Контроллер:
package com.example.myapp.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
@GetMapping("/hello")
public String sayHello() {
logger.info("INFO: Handling /hello request");
logger.debug("DEBUG: Additional debug information");
logger.error("ERROR: Simulated error log (just an example)");
return "Hello, Spring Boot with Actuator!";
}
}
В этом примере мы добавили логи с уровнями INFO, DEBUG и ERROR. Теперь вы можете проверять эти события в лог-файле приложения и управлять их видимостью через Actuator.
Настройка логирования для безопасности
Логи безопасности особенно полезны при использовании Spring Security. Вот как можно настроить логирование для анализа успешных и неудачных попыток входа в систему:
Пример application.properties:
logging.level.org.springframework.security=DEBUG
Теперь запросы, связанные с авторизацией и аутентификацией, будут логироваться. Это может помочь выявить подозрительную активность.
Практическое задание: работа с логами
Краткое задание:
- Настройте в вашем проекте эндпоинт
/actuator/loggers. - Добавьте логи с различными уровнями (
INFO,WARN,DEBUG) в один из ваших контроллеров. - Измените уровень логирования на лету через
PUTзапрос к/actuator/loggers. - Проверьте, как изменения отражаются в логах.
Защита логов с помощью Spring Security
Важно помнить, что данные в логах могут быть чувствительными. Настройте защиту эндпоинта /actuator/loggers, чтобы ограничить доступ только для авторизованных пользователей.
Пример секьюрной конфигурации:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> requests
.requestMatchers("/actuator/loggers/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.httpBasic();
return http.build();
}
}
Теперь только пользователи с ролью ADMIN смогут изменять уровень логирования или просматривать конфигурацию через /actuator/loggers.
Дополнительно: анализ логов
Когда вы объедините Actuator с внешними системами, такими, как ELK (Elasticsearch, Logstash, Kibana), логи станут ещё мощнее. Вы можете настраивать карту запросов, которые привели, например, к ошибке, и визуализировать это.
Итог
Теперь ваше приложение не только логирует ошибки, но и позволяет вам гибко управлять настройками логирования через Actuator и API. Это помогает минимизировать время поиска и устранения проблем, а также даёт вам больше контроля над мониторингом приложения.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ