🔵 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)
🔵 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
Evidência
src/api/mod.rs:574:.wrap(actix_web::middleware::Logger::default())Correção recomendada
Middleware de request-id:
Logger customizado:
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)