Request Id 中介軟體具備高度彈性,其生成器(IdGenerator) 專門用於產生識別碼,您可以自訂專屬的識別碼生成器,只需實作 IdGenerator 這個特徵。系統預設提供的生成器為 UlidGenerator。
IdGenerator
UlidGenerator
此外,您可自行控制是否覆蓋現有已存在的 requestid。還能設定 header_name 等參數,詳細內容請參閱官方文件。
requestid
header_name
範例程式碼
use salvo::prelude::*; #[handler] async fn hello(req: &mut Request) -> String { format!("Request id: {:?}", req.header::<String>("x-request-id")) } #[tokio::main] async fn main() { tracing_subscriber::fmt().init(); let acceptor = TcpListener::new("0.0.0.0:8698").bind().await; let router = Router::new().hoop(RequestId::new()).get(hello); Server::new(acceptor).serve(router).await; }
[package] name = "example-request-id" version.workspace = true edition.workspace = true publish.workspace = true rust-version.workspace = true [dependencies] salvo = { workspace = true, features = ["request-id"] } tokio = { workspace = true, features = ["macros"] } tracing.workspace = true tracing-subscriber.workspace = true