low_latency_log 0.1.0

Fast and Low Latency Logging Library for Rust
Documentation
pub const LEVEL_FILTER: crate::LogLevel = LEVEL_FILTER_INNER;

#[macro_export]
macro_rules! log {
    ($lvl:expr, $fmt:expr, $($arg:tt)+) => {
        if $lvl >= $crate::macros::LEVEL_FILTER{
            let tid = $crate::TID.get();
            let system_time = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_nanos() as u64;
            let func = $crate::internal::LoggingFunc::new(
                move || {
                    format!($fmt, $($arg)+).into()
                },
                std::file!(),
                std::line!(),
                tid,
                $lvl,
                system_time,
            );
            $crate::internal::log(func);
        }
    };

    ($lvl:expr, $fmt:expr) => {
        if $lvl >= $crate::macros::LEVEL_FILTER{
            let tid = $crate::TID.get();
            let system_time = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_nanos() as u64;
            let func = $crate::internal::LoggingFunc::new(
                move || {
                $fmt.into()
                },
                std::file!(),
                std::line!(),
                tid,
                $lvl,
                system_time
            );
            $crate::internal::log(func);
        }
    };
}

use cfg_if::cfg_if;

use crate::LogLevel;

cfg_if! {
  if #[cfg(feature = "level-off")] {
        const LEVEL_FILTER_INNER: LogLevel = LogLevel::Off;
    } else if #[cfg(feature = "level-error")] {
        const LEVEL_FILTER_INNER: LogLevel = LogLevel::Error;
    } else if #[cfg(feature = "level-warn")] {
        const LEVEL_FILTER_INNER: LogLevel = LogLevel::Warn;
    } else if #[cfg(feature = "level-info")] {
        const LEVEL_FILTER_INNER: LogLevel = LogLevel::Info;
    } else if #[cfg(feature = "level-debug")] {
        const LEVEL_FILTER_INNER: LogLevel = LogLevel::Debug;
    } else {
        const LEVEL_FILTER_INNER: LogLevel = LogLevel::Trace;
    }
}

#[macro_export]
macro_rules! error {
    ($($arg:tt)+) => ($crate::log!($crate::LogLevel::Error, $($arg)+));
    ($fmt:expr) => ($crate::log!($crate::Level::Error, expr))
}

#[macro_export]
macro_rules! warn {
    ($($arg:tt)+) => ($crate::log!($crate::LogLevel::Warn, $($arg)+));
    ($fmt:expr) => ($crate::log!($crate::Level::Warn, expr))

}

#[macro_export]
macro_rules! info {
    ($($arg:tt)+) => ($crate::log!($crate::LogLevel::Info, $($arg)+));
    ($fmt:tt) => ($crate::log!($crate::Level::Info, expr))
}

#[macro_export]
macro_rules! debug {
    ($($arg:tt)+) => ($crate::log!($crate::LogLevel::Debug, $($arg)+));
    ($fmt:expr) => ($crate::log!($crate::Level::Debug, expr))
}

#[macro_export]
macro_rules! trace {
    ($($arg:tt)+) => ($crate::log!($crate::LogLevel::Trace, $($arg)+));
    ($fmt:expr) => ($crate::log!($crate::Level::Trace, expr))
}