rust_observer_log_macro 0.1.5

Log macro dependency for rust observer
Documentation
#[macro_export]
macro_rules! log {
    // Just message
    ($level:expr, $msg:expr) => {
        $crate::log_internal!($level, $msg, None, std::collections::HashMap::new())
    };
    // Message and context
    ($level:expr, $msg:expr, ctx: $ctx:expr) => {
        $crate::log_internal!($level, $msg, $ctx, std::collections::HashMap::new())
    };
    // Message and attributes
    ($level:expr, $msg:expr, attrs: {$($key:expr => $value:expr),*$(,)?}) => {
        $crate::log_internal!($level, $msg, None, $crate::create_attributes!($($key => $value),*))
    };
    // Message, attributes, and context
    ($level:expr, $msg:expr, attrs: {$($key:expr => $value:expr),*$(,)?}, ctx: $ctx:expr) => {
        $crate::log_internal!($level, $msg, $ctx, $crate::create_attributes!($($key => $value),*))
    };
}

#[macro_export]
macro_rules! log_internal {
    ($level:expr, $msg:expr, $ctx:expr, $attributes:expr) => {{
        if let Some(logger) = rust_observer::logging::get_logger() {
            if $level >= rust_observer::logging::get_log_level() {
                let message = std::borrow::Cow::Owned($msg.to_string());
                let ts = rust_observer::chrono::Utc::now();
                let target = module_path!();
                let global_context = rust_observer::context::get_global_context();
                let global_context = global_context.read();

                logger.log(rust_observer::logging::LogMessage {
                    timestamp: ts,
                    level: $level,
                    project_name: global_context.project_name.clone(),
                    app_name: global_context.app_name.clone(),
                    service_name: global_context.service_name.clone(),
                    replica_id: global_context.replica_id.clone(),
                    target,
                    message,
                    context: $ctx,
                    attributes: $attributes,
                });
            }
        }
    }};
}

#[macro_export]
macro_rules! create_attributes {
    ($($key:expr => $value:expr),*) => {{
        let mut map = std::collections::HashMap::new();
        $(
            let key = $key.to_string();
            let value = rust_observer::serde_json::to_value(&$value)
                .unwrap_or(rust_observer::serde_json::Value::Null);
            map.insert(key, value);
        )*
        map
    }};
}

#[macro_export]
macro_rules! debug {
    ($($args:tt)*) => { $crate::log!(rust_observer::logging::LogLevel::DEBUG, $($args)*) };
}

#[macro_export]
macro_rules! info {
    ($($args:tt)*) => { $crate::log!(rust_observer::logging::LogLevel::INFO, $($args)*) };
}

#[macro_export]
macro_rules! warn {
    ($($args:tt)*) => { $crate::log!(rust_observer::logging::LogLevel::WARN, $($args)*) };
}

#[macro_export]
macro_rules! error {
    ($($args:tt)*) => { $crate::log!(rust_observer::logging::LogLevel::ERROR, $($args)*) };
}

#[macro_export]
macro_rules! fatal {
    ($($args:tt)*) => { $crate::log!(rust_observer::logging::LogLevel::FATAL, $($args)*) };
}

#[macro_export]
macro_rules! span_error {
    ($ctx:expr) => {
        if let Some(ctx) = &($ctx) {
            ctx.signal_error();
        }
    };
}