arnaucube
arnaucube/sonobe-playgroundPublic Self-hosted repository
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}