Skip to content

OBSERV-003: Logging sem request-id tracking — correlação entre logs difícil #369

@ElioNeto

Description

@ElioNeto

🔵 Baixo | Observabilidade | API

Problema

O logger do actix-web usa formato default sem x-request-id. Não há identificador único para correlacionar logs de uma mesma requisição entre diferentes componentes (API → Engine → CDC).

Impacto

  • Debugging distribuído difícil
  • Impossível correlacionar erro de engine com requisição específica
  • Sem trilha de auditoria ponta-a-ponta

Evidência

src/api/mod.rs:574: .wrap(actix_web::middleware::Logger::default())

Correção recomendada

Middleware de request-id:

use uuid::Uuid;

pub struct RequestId;

impl<S, B> Transform<S, ServiceRequest> for RequestId
where /* ... */
{
    fn call(&self, req: ServiceRequest) -> Self::Future {
        let request_id = req.headers()
            .get("x-request-id")
            .and_then(|v| v.to_str().ok())
            .map(|s| s.to_string())
            .unwrap_or_else(|| Uuid::new_v4().to_string());

        req.extensions_mut().insert(RequestIdValue(request_id.clone()));
        req.headers_mut().insert(
            "x-request-id",
            HeaderValue::from_str(&request_id).unwrap()
        );

        self.service.call(req)
    }
}

Logger customizado:

let log_format = r#"{"time":"%t","level":"%l","request_id":"%{x-request-id}xi","method":"%r","status":%s,"duration_ms":%D,"size":%b}"#;
app.wrap(Logger::new(log_format));

Saída esperada:

{"time":"2026-05-26T12:00:00Z","level":"INFO","request_id":"a1b2c3d4-...","method":"GET /keys/42","status":200,"duration_ms":1.234,"size":56}

Esforço: Baixo (3h)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions