#axum #id #tracing #request-id #trace-id #request-response

axum-trace-id

Axum中间件,用于向请求添加跟踪ID

1 个不稳定版本

0.1.0 2023年7月26日

#1365 in HTTP服务器

每月42次下载

MIT许可证

14KB
282 代码行

axum-trace-id

Axum中间件,用于向请求添加跟踪ID。

基本用法

添加SetTraceIdLayer<T>层会使TraceId<T>通过请求和响应扩展可用。该crate还提供了一个提取器,用于在处理程序中访问跟踪ID。对于特殊用例(例如,仅在http错误的情况下懒加载生成跟踪ID),您可以在您的类型上实现MakeTraceId

use axum::{routing::get, Router};
use axum_trace_id::{SetTraceIdLayer, TraceId};

let app: Router = Router::new()
     .route(
         "/",
         get(|trace_id: TraceId<String>| async move { trace_id.to_string() }),
     )
     .layer(SetTraceIdLayer::<String>::new());

tracing一起使用

要使用tracing,您可以通过扩展访问请求的跟踪ID。

use axum::{http::Request, routing::get, Router};
use axum_trace_id::{SetTraceIdLayer, TraceId};
use tower_http::trace::TraceLayer;
use tracing::info_span;

let app = Router::new()
    .route("/", get(|| async { "" }))
    .layer(TraceLayer::new_for_http().make_span_with(|request: &Request<_>| {
        let trace_id = request.extensions().get::<TraceId<String>>().unwrap();

        info_span!("http_request", trace_id = trace_id)
    }));

许可证

本项目采用MIT许可证

依赖关系

~6.5–8.5MB
~153K SLoC