mirror of
https://git.proxmox.com/git/rustc
synced 2025-08-15 01:10:36 +00:00
112 lines
3.6 KiB
Rust
112 lines
3.6 KiB
Rust
use tracing::{
|
|
debug, error, info, instrument, level_filters::LevelFilter, span, trace, warn, Level,
|
|
};
|
|
use tracing_subscriber::{layer::SubscriberExt, registry::Registry, Layer};
|
|
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(true)
|
|
.with_verbose_entry(true)
|
|
.with_deferred_spans(true)
|
|
.with_targets(true)
|
|
.with_span_modes(true)
|
|
.with_filter(LevelFilter::DEBUG);
|
|
|
|
let subscriber = Registry::default().with(layer);
|
|
tracing::subscriber::set_global_default(subscriber).unwrap();
|
|
#[cfg(feature = "tracing-log")]
|
|
tracing_log::LogTracer::init().unwrap();
|
|
|
|
let app_span = span!(Level::DEBUG, "hierarchical-example", version = %0.1);
|
|
let _e = app_span.enter();
|
|
|
|
let server_span = span!(Level::DEBUG, "server", host = "localhost", port = 8080);
|
|
|
|
println!("-> This prints before the span open message");
|
|
|
|
let _e2 = server_span.enter();
|
|
info!("starting");
|
|
std::thread::sleep(std::time::Duration::from_millis(1000));
|
|
|
|
span!(Level::INFO, "empty-span").in_scope(|| {
|
|
// empty span
|
|
});
|
|
|
|
info!("listening");
|
|
// Defer two levels of spans
|
|
println!("-> Deferring two levels of spans");
|
|
span!(Level::INFO, "connections").in_scope(|| {
|
|
let peer1 = span!(Level::DEBUG, "conn", peer_addr = "82.9.9.9", port = 42381);
|
|
peer1.in_scope(|| {
|
|
debug!(peer = "peer1", "connected");
|
|
std::thread::sleep(std::time::Duration::from_millis(300));
|
|
debug!(length = 2, "message received");
|
|
});
|
|
|
|
drop(peer1);
|
|
let peer2 = span!(Level::DEBUG, "conn", peer_addr = "82.9.9.9", port = 61548);
|
|
|
|
// This span will not be printed at all since no event in it will pass the filter
|
|
peer2.in_scope(|| {
|
|
trace!(peer = "peer2", "connected");
|
|
std::thread::sleep(std::time::Duration::from_millis(300));
|
|
trace!(length = 2, "message received");
|
|
});
|
|
drop(peer2);
|
|
let peer3 = span!(Level::DEBUG, "conn", peer_addr = "8.8.8.8", port = 18230);
|
|
peer3.in_scope(|| {
|
|
std::thread::sleep(std::time::Duration::from_millis(300));
|
|
debug!(peer = "peer3", "connected");
|
|
});
|
|
drop(peer3);
|
|
let peer4 = span!(
|
|
Level::DEBUG,
|
|
"foomp",
|
|
normal_var = 43,
|
|
"{} <- format string",
|
|
42
|
|
);
|
|
peer4.in_scope(|| {
|
|
error!("hello");
|
|
});
|
|
drop(peer4);
|
|
let peer1 = span!(Level::DEBUG, "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::DEBUG, "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");
|
|
log::error!("this is a log message");
|
|
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");
|
|
}
|