1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use tracing::dispatcher;

pub struct SharedLogger {
    dispatch: tracing::Dispatch,
    #[cfg(feature = "log")]
    logger: &'static dyn log::Log,
}

pub fn build_shared_logger() -> SharedLogger {
    SharedLogger {
        dispatch: dispatcher::get_default(|dispatch| dispatch.clone()),
        #[cfg(feature = "log")]
        logger: log::logger(),
    }
}

pub fn setup_shared_logger(logger: SharedLogger) {
    dispatcher::set_global_default(logger.dispatch).unwrap();
    #[cfg(feature = "log")]
    log::set_logger(logger.logger).unwrap();
    #[cfg(feature = "log")]
    log::set_max_level(log::LevelFilter::Trace);
}