Hi folks,
I am trying to write a middleware for my axum http server which logs the requests and responses along with adding request_id to a span. Though when I try creating the span in the middleware, the from_fn starts throwing the following error:
the trait bound `axum::middleware::FromFn<fn(axum::http::Request<axum::body::Body>, axum::middleware::Next) -> impl std::future::Future<Output = axum::http::Response<axum::body::Body>> {my_middleware}, (), axum::routing::Route, _>: tower_service::Service<axum::http::Request<axum::body::Body>>` is not satisfied
This is the body of my_middleware:
async fn my_middleware(request: Request, next: Next) -> Response {
// do something with `request`...
let request_id = "some-id";
let _span = tracing::info_span!("request", %request_id).entered();
let response = next.run(request).await;
// do something with `response`...
response
}
If the span is removed from the middleware then the error goes away. Can someone please help me understand this behaviour?