1 个不稳定版本
0.1.0 | 2023年7月26日 |
---|
#1365 in HTTP服务器
每月42次下载
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