use tracing;
use tracing_subscriber::{filter::LevelFilter, fmt, prelude::*, EnvFilter};
pub fn init_subscriber() {
let fmt_layer = fmt::layer().with_target(true);
let filter_layer = EnvFilter::builder()
.with_default_directive(LevelFilter::INFO.into())
.from_env_lossy();
tracing_subscriber::registry()
.with(filter_layer)
.with(fmt_layer)
.init();
}
pub fn init_test_subscriber() -> tracing::subscriber::DefaultGuard {
let fmt_layer = fmt::layer().with_target(true).with_test_writer();
let filter_layer = EnvFilter::builder()
.with_default_directive(LevelFilter::INFO.into())
.from_env_lossy();
tracing_subscriber::registry()
.with(filter_layer)
.with(fmt_layer)
.set_default()
}
#[cfg(test)]
mod tests {
use super::*;
use tracing::{debug, error, info, warn};
#[test]
fn test_init_test_subscriber() {
let _guard = init_test_subscriber();
info!("test info message");
warn!("test warn message");
error!("test error message");
debug!("test debug message");
}
#[test]
fn test_init_test_subscriber_guard_scope() {
{
let _guard = init_test_subscriber();
info!("inside guard scope");
}
let _guard2 = init_test_subscriber();
info!("new guard scope");
}
}