diff --git a/Cargo.toml b/Cargo.toml index 19f3edd..0d67601 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,6 +38,7 @@ http-body-util = "0.1.0" tokio = { version = "1", features = ["macros", "test-util", "signal"] } tokio-test = "0.4" pretty_env_logger = "0.5" +tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } [target.'cfg(any(target_os = "linux", target_os = "macos"))'.dev-dependencies] pnet_datalink = "0.35.0" diff --git a/examples/client.rs b/examples/client.rs index 04defac..de51795 100644 --- a/examples/client.rs +++ b/examples/client.rs @@ -3,9 +3,23 @@ use std::env; use http_body_util::Empty; use hyper::Request; use hyper_util::client::legacy::{connect::HttpConnector, Client}; +use tracing::{info_span, Instrument}; +use tracing_subscriber::{ + fmt::{self, format::FmtSpan}, + prelude::*, + EnvFilter, +}; #[tokio::main(flavor = "current_thread")] async fn main() -> Result<(), Box> { + let fmt_layer = fmt::layer() + .with_span_events(FmtSpan::CLOSE) // show time elapsed in spans + .with_timer(fmt::time::Uptime::default()); + tracing_subscriber::registry() + .with(EnvFilter::from_default_env()) + .with(fmt_layer) + .init(); + let url = match env::args().nth(1) { Some(url) => url, None => { @@ -28,7 +42,8 @@ async fn main() -> Result<(), Box> { .uri(url) .body(Empty::::new())?; - let resp = client.request(req).await?; + let span = info_span!("request", uri = %req.uri()); + let resp = client.request(req).instrument(span).await?; eprintln!("{:?} {:?}", resp.version(), resp.status()); eprintln!("{:#?}", resp.headers()); diff --git a/src/client/legacy/connect/dns.rs b/src/client/legacy/connect/dns.rs index d29b984..fa6f74d 100644 --- a/src/client/legacy/connect/dns.rs +++ b/src/client/legacy/connect/dns.rs @@ -31,7 +31,7 @@ use std::{fmt, io, vec}; use tokio::task::JoinHandle; use tower_service::Service; -use tracing::debug; +use tracing::{debug, debug_span}; pub(super) use self::sealed::Resolve; @@ -118,10 +118,10 @@ impl Service for GaiResolver { } fn call(&mut self, name: Name) -> Self::Future { - let current_span = tracing::Span::current(); + let span = debug_span!("resolve", host = %name.host).or_current(); let blocking = tokio::task::spawn_blocking(move || { - let _enter = current_span.enter(); - debug!("resolving host={:?}", name.host); + let _enter = span.enter(); + debug!(host = name.host, "resolving"); (&*name.host, 0) .to_socket_addrs() .map(|i| SocketAddrs { iter: i })