Skip to content

Commit

Permalink
feat: [#468] add request id to response log
Browse files Browse the repository at this point in the history
```
2024-02-12T18:20:13.114426999+00:00 [API][INFO] finished processing request; latency=0 status=200 OK request_id=a5030c7a-5302-49d4-8e66-f0f0ab0e3ce3
``:Wq
  • Loading branch information
josecelano committed Feb 12, 2024
1 parent db6a62f commit 91f818e
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions src/web/api/server/v1/routes.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
//! Route initialization for the v1 API.
use std::env;
use std::sync::Arc;
use std::time::Duration;

use axum::extract::DefaultBodyLimit;
use axum::http::{HeaderName, HeaderValue};
use axum::response::Redirect;
use axum::response::{Redirect, Response};
use axum::routing::get;
use axum::{Json, Router};
use hyper::Request;
Expand All @@ -13,8 +14,8 @@ use tower_http::compression::CompressionLayer;
use tower_http::cors::CorsLayer;
use tower_http::propagate_header::PropagateHeaderLayer;
use tower_http::request_id::{MakeRequestId, RequestId, SetRequestIdLayer};
use tower_http::trace::{DefaultMakeSpan, DefaultOnRequest, DefaultOnResponse, TraceLayer};
use tracing::Level;
use tower_http::trace::{DefaultMakeSpan, DefaultOnRequest, TraceLayer};
use tracing::{Level, Span};
use uuid::Uuid;

use super::contexts::{about, category, proxy, settings, tag, torrent, user};
Expand Down Expand Up @@ -56,14 +57,26 @@ pub fn router(app_data: Arc<AppData>) -> Router {
router
.layer(DefaultBodyLimit::max(10_485_760))
.layer(CompressionLayer::new())
.layer(PropagateHeaderLayer::new(HeaderName::from_static("x-request-id")))
.layer(SetRequestIdLayer::x_request_id(RequestIdGenerator))
.layer(
TraceLayer::new_for_http()
.make_span_with(DefaultMakeSpan::new().level(Level::INFO))
.on_request(DefaultOnRequest::new().level(Level::INFO))
.on_response(DefaultOnResponse::new().level(Level::INFO)),
.on_response(|response: &Response, latency: Duration, _span: &Span| {
let status_code = response.status();
let request_id = response
.headers()
.get("x-request-id")
.map(|v| v.to_str().unwrap_or_default())
.unwrap_or_default();
let latency_ms = latency.as_millis();

tracing::span!(
target: "API",
tracing::Level::INFO, "finished processing request", latency = %latency_ms, status = %status_code, request_id = %request_id);
}),
)
.layer(PropagateHeaderLayer::new(HeaderName::from_static("x-request-id")))
.layer(SetRequestIdLayer::x_request_id(RequestIdGenerator))
}

/// Endpoint for container health check.
Expand Down

0 comments on commit 91f818e

Please sign in to comment.