scuriolus 0.3.0

Scuriolus is a modular trading bot platform.
Documentation
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)*);
    };
}