2026-01-13 09:39:06
Как настроить production-ready логирование в Spring BootЛоги в проде — это не просто System.out.println(). Это структурированные данные, correlation ID, асинхронная запись и ротация. Разбираем настройку от А до Я.
Выбираем стек: Logback + SLF4JSpring Boot из коробки использует Logback. Добавляем зависимости:
net.logstash.logback
logstash-logback-encoder
7.4
ИЛИ
gradleimplementation 'net.logstash.logback:logstash-logback-encoder:7.4'
Это даст JSON-формат логов для удобного парсинга в ELK/Grafana.
Создаём logback-spring.xmlКладём в
src/main/resources:
false
true
logs/application.log
logs/application-%d{yyyy-MM-dd}.%i.log.gz
100MB
30
10GB
Логи ротируются по размеру и времени, старые архивируются в gzip.
Добавляем Correlation IDСоздаём фильтр для трекинга запросов:
@Component
public class CorrelationIdFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws ServletException, IOException {
String correlationId = request.getHeader("X-Correlation-ID");
if (correlationId == null) {
correlationId = UUID.randomUUID().toString();
}
MDC.put("correlationId", correlationId);
response.setHeader("X-Correlation-ID", correlationId);
try {
chain.doFilter(request, response);
} finally {
MDC.clear();
}
}
}
Теперь каждый лог привязан к конкретному запросу. В JSON-логе будет поле correlationId.
Настраиваем уровни логирования в application.ymllogging:
level:
root: INFO
com.yourcompany: DEBUG
org.springframework.web: WARN
org.hibernate.SQL: DEBUG
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"
Для прода root: INFO, для дебага поднимаем до DEBUG только нужные пакеты.
Асинхронная запись логовДобавляем в logback-spring.xml:
512
0
Логи пишутся в отдельном потоке и не блокируют бизнес-логику.
Интеграция с мониторингомДля отправки в Logstash/Fluentd добавляем TCP-аппендер:
logstash.example.com:5000
══════ Навигация ══════
Вакансии • Задачи • Собесы
Библиотека джависта
#Enterprise
1.68K views06:39