use std::sync::Once;
pub use tracing::{Level, error, event, info, trace, warn};
use tracing_appender::rolling;
use tracing_subscriber::{EnvFilter, Layer, Registry, fmt, layer::SubscriberExt};
static INIT: Once = Once::new();
#[ctor::ctor]
pub fn load_loggers() {
INIT.call_once(|| {
let trade_log = rolling::hourly("logs/trade_logs", "trade.log");
let trade_layer = fmt::layer()
.with_writer(trade_log)
.with_ansi(false)
.event_format(fmt::format().with_level(false).with_target(false))
.with_filter(EnvFilter::new("trade_log=trace"));
let console_layer = fmt::layer()
.event_format(fmt::format().with_target(false).without_time())
.with_filter(EnvFilter::from_env("RUST_LOG"));
let main_log = rolling::hourly("logs/main", "main.log");
let main_layer = fmt::layer()
.with_writer(main_log)
.with_ansi(false)
.with_filter(EnvFilter::new("trace"));
let subscriber = Registry::default()
.with(console_layer)
.with(trade_layer)
.with(main_layer);
tracing::subscriber::set_global_default(subscriber)
.expect("Impossible d'initialiser le logger");
trace!("Logger initialised");
});
}
#[macro_export(local_inner_macros)]
macro_rules! trade_log {
($($arg:tt)*) => {
tracing::event!(target: "trade_log", tracing::Level::INFO, $($arg)*);
};
}