1use std::sync::Once;
2use tracing_error::ErrorLayer;
3use tracing_subscriber::EnvFilter;
4use tracing_subscriber::filter::LevelFilter;
5use tracing_subscriber::layer::Layer;
6use tracing_subscriber::layer::SubscriberExt;
7use tracing_subscriber::util::SubscriberInitExt;
8
9pub fn init_logging() {
10 static INIT: Once = Once::new();
11 INIT.call_once(|| {
12 let fmt_filter = EnvFilter::try_from_default_env()
13 .unwrap_or_else(|_| EnvFilter::builder().parse("warn").unwrap());
14
15 tracing_subscriber::registry()
16 .with(ErrorLayer::default().with_filter(LevelFilter::INFO))
17 .with(
18 tracing_subscriber::fmt::layer()
19 .with_filter(fmt_filter), )
21 .init();
22 });
23}
24
25#[macro_export]
26macro_rules! log_error {
27 ($($arg:tt)*) => {
28 $crate::logging::error!($($arg)*);
29 };
30}
31
32pub use log_error;
33pub use tracing::{debug, error, info, info_span, instrument, trace, warn};