| use tracing::{debug, error, info, instrument, span, warn, Level}; |
| use tracing_subscriber::{layer::SubscriberExt, registry::Registry}; |
| use tracing_tree::HierarchicalLayer; |
| |
| fn main() { |
| let layer = HierarchicalLayer::default() |
| .with_writer(std::io::stdout) |
| .with_indent_lines(true) |
| .with_indent_amount(2) |
| .with_thread_names(true) |
| .with_thread_ids(true) |
| .with_verbose_exit(false) |
| .with_verbose_entry(false) |
| .with_targets(true); |
| |
| let subscriber = Registry::default().with(layer); |
| tracing::subscriber::set_global_default(subscriber).unwrap(); |
| |
| let app_span = span!(Level::TRACE, "hierarchical-example", version = %0.1); |
| let _e = app_span.enter(); |
| |
| let server_span = span!(Level::TRACE, "server", host = "localhost", port = 8080); |
| let _e2 = server_span.enter(); |
| info!("starting"); |
| std::thread::sleep(std::time::Duration::from_millis(300)); |
| info!("listening"); |
| let peer1 = span!(Level::TRACE, "conn", peer_addr = "82.9.9.9", port = 42381); |
| peer1.in_scope(|| { |
| debug!("connected"); |
| std::thread::sleep(std::time::Duration::from_millis(300)); |
| debug!(length = 2, "message received"); |
| }); |
| drop(peer1); |
| let peer2 = span!(Level::TRACE, "conn", peer_addr = "8.8.8.8", port = 18230); |
| peer2.in_scope(|| { |
| std::thread::sleep(std::time::Duration::from_millis(300)); |
| debug!("connected"); |
| }); |
| drop(peer2); |
| let peer3 = span!( |
| Level::TRACE, |
| "foomp", |
| normal_var = 43, |
| "{} <- format string", |
| 42 |
| ); |
| peer3.in_scope(|| { |
| error!("hello"); |
| }); |
| drop(peer3); |
| let peer1 = span!(Level::TRACE, "conn", peer_addr = "82.9.9.9", port = 42381); |
| peer1.in_scope(|| { |
| warn!(algo = "xor", "weak encryption requested"); |
| std::thread::sleep(std::time::Duration::from_millis(300)); |
| debug!(length = 8, "response sent"); |
| debug!("disconnected"); |
| }); |
| drop(peer1); |
| let peer2 = span!(Level::TRACE, "conn", peer_addr = "8.8.8.8", port = 18230); |
| peer2.in_scope(|| { |
| debug!(length = 5, "message received"); |
| std::thread::sleep(std::time::Duration::from_millis(300)); |
| debug!(length = 8, "response sent"); |
| debug!("disconnected"); |
| }); |
| drop(peer2); |
| warn!("internal error"); |
| info!("exit"); |
| } |
| |
| #[instrument] |
| fn call_a(name: &str) { |
| info!(name, "got a name"); |
| call_b(name) |
| } |
| |
| #[instrument] |
| fn call_b(name: &str) { |
| info!(name, "got a name"); |
| } |