Depois de fechar o Reporting Service, o desafio no Day 11 do #30DiasJava foi garantir rastreabilidade ponta a ponta. O resultado é um Logging Service que empacota correlação distribuída, mascaramento de PII e ingestão centralizada em um starter pronto para qualquer microserviço Spring Boot.
🧰 What went live
- Starter de logging (
logging-service-starter) com SLF4J + Logback, layouts JSON e appenders STDOUT/FILE/GELF. - Correlation ID + Session ID propagados via filtros Servlet,
RestTemplateeWebClient, inclusive em chamadas assíncronas. - Log context com MDC (
requestId,tenant,userId,featureFlag,endpoint) aplicado automaticamente em cada request. - Mascaramento e redaction (
@SensitiveLog) para PII (email, taxId) antes dos logs saírem do pod. - Shipping centralizado: Filebeat → Logstash → Elasticsearch → Kibana, com dashboards “Error Heatmap” e “Slow Requests”.
💡 Why it matters
- Auditoria consegue seguir um request em segundos — do mobile ao banco.
- Times de incident response ganham um atalho:
requestId→ stacktrace → fix. - Logs estruturados viram insumo para métricas, alertas e análise de produto.
📚 Deep dive (+ code)
- Artigo completo: https://enouveau.io/blog/2025/11/11/logging-service-under-the-hood.html
- Repositório: https://github.com/adelmonsouza/30DiasJava-Day11-Logging
- Projeto pessoal: Este é um projeto do desafio #30DiasJava, mantido independentemente para fins educacionais.
🧩 Implementation Notes
- Logback JSON encoder (
net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder) com providers (mdc,arguments,stackTrace). - Config as code:
logging/enouveau-logback.xmlincluído em todos os serviços via Spring Boot auto-config. - Async logging com
AsyncAppenderpara não bloquear threads HTTP. - Dynamic log level: endpoint
/actuator/loggersprotegido via RBAC para ajustar níveis em runtime. - Metrics:
logging.events.total{level="ERROR"},logging.events.droppedexpostos via Micrometer + Prometheus.
✅ Daily checklist
- Filebeat/Logstash/Elasticsearch verdes (health check) e índices rotacionando (
log-enouveau-YYYY.MM.DD). - Alertas (
logging.error.count > 50 em 5m) sendo enviados ao Slack/Teams. - Dashboards Kibana revisados com o time de suporte e SRE.
Next episode → Day 12/30 — Monitoring Service with Prometheus & Grafana