grlog 0.1.1

A high-performance async logging library based on gorust GMP runtime
Documentation
pub mod target;
pub mod level;
pub mod writer;
pub mod formatter;
pub mod backend;
pub mod logger;
pub mod builder;

pub use target::Target;
pub use level::{Level, LevelFilter, Metadata, Record, Log};
pub use builder::{LoggerBuilder, init, init_from_env, builder, SetLoggerError};

#[macro_export]
macro_rules! trace {
    ($($arg:tt)+) => {
        $crate::_log($crate::Level::Trace, module_path!(), format_args!($($arg)+))
    };
}

#[macro_export]
macro_rules! debug {
    ($($arg:tt)+) => {
        $crate::_log($crate::Level::Debug, module_path!(), format_args!($($arg)+))
    };
}

#[macro_export]
macro_rules! info {
    ($($arg:tt)+) => {
        $crate::_log($crate::Level::Info, module_path!(), format_args!($($arg)+))
    };
}

#[macro_export]
macro_rules! warn {
    ($($arg:tt)+) => {
        $crate::_log($crate::Level::Warn, module_path!(), format_args!($($arg)+))
    };
}

#[macro_export]
macro_rules! error {
    ($($arg:tt)+) => {
        $crate::_log($crate::Level::Error, module_path!(), format_args!($($arg)+))
    };
}

pub fn _log(level: Level, target: &str, args: std::fmt::Arguments) {
    use crate::builder::GLOBAL_LOGGER;
    use crate::builder::MAX_LEVEL;
    
    if let Some(max_level) = MAX_LEVEL.get() {
        if max_level.is_enabled(level) {
            if let Some(logger) = GLOBAL_LOGGER.get() {
                let metadata = Metadata::builder()
                    .level(level)
                    .target(target)
                    .build();
                
                if logger.enabled(&metadata) {
                    let record = Record::builder()
                        .metadata(metadata)
                        .args(args)
                        .build();
                    logger.log(&record);
                }
            }
        }
    }
}