diff --git a/src/main.rs b/src/main.rs
index 49ceb1b7cbebfb73c314841c6845a6d0ccdfa9a9..a4f3754ab26c9ab557e5bf80c2dbda40d7cb29c0 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -32,10 +32,10 @@
 use tower::ServiceBuilder;
 use tower_http::{
     cors::{self, CorsLayer},
-    trace::TraceLayer,
+    trace::{DefaultOnFailure, TraceLayer},
     ServiceBuilderExt as _,
 };
-use tracing::{debug, error, info, warn};
+use tracing::{debug, error, info, warn, Level};
 use tracing_subscriber::{prelude::*, EnvFilter};
 
 use tokio::sync::oneshot::Sender;
@@ -186,15 +186,17 @@ async fn run_server() -> io::Result<()> {
         .sensitive_headers([header::AUTHORIZATION])
         .layer(axum::middleware::from_fn(spawn_task))
         .layer(
-            TraceLayer::new_for_http().make_span_with(|request: &http::Request<_>| {
-                let path = if let Some(path) = request.extensions().get::<MatchedPath>() {
-                    path.as_str()
-                } else {
-                    request.uri().path()
-                };
-
-                tracing::info_span!("http_request", %path)
-            }),
+            TraceLayer::new_for_http()
+                .make_span_with(|request: &http::Request<_>| {
+                    let path = if let Some(path) = request.extensions().get::<MatchedPath>() {
+                        path.as_str()
+                    } else {
+                        request.uri().path()
+                    };
+
+                    tracing::info_span!("http_request", %path)
+                })
+                .on_failure(DefaultOnFailure::new().level(Level::INFO)),
         )
         .layer(axum::middleware::from_fn(unrecognized_method))
         .layer(