sonobe-playground/src/logging.rs
src/logging.rsRaw
1use std::{io, time::Instant};
2
3use tracing::{info, level_filters::LevelFilter};
4use tracing_subscriber::{EnvFilter, fmt::format::FmtSpan};
5
6pub fn measure<T, Action: FnOnce() -> T>(action_name: &str, action: Action) -> T {
7 let start = Instant::now();
8 let result = action();
9 info!("{action_name}: {:?}", start.elapsed());
10 result
11}
12
13fn get_filter() -> EnvFilter {
14 EnvFilter::builder()
15 .with_default_directive(LevelFilter::WARN.into())
16 .from_env_lossy()
17 .add_directive("playground=info".parse().unwrap())
18}
19
20pub fn init_logging() {
21 tracing_subscriber::fmt()
22 .with_writer(io::stdout)
23 .with_target(false)
24 .with_env_filter(get_filter())
25 .with_span_events(FmtSpan::CLOSE)
26 .with_level(false)
27 .json()
28 .try_init()
29 .expect("Failed to initialize logging");
30}