#[macro_export]
macro_rules! log {
($level:expr, $msg:expr) => {
$crate::log_internal!($level, $msg, None, std::collections::HashMap::new())
};
($level:expr, $msg:expr, ctx: $ctx:expr) => {
$crate::log_internal!($level, $msg, $ctx, std::collections::HashMap::new())
};
($level:expr, $msg:expr, attrs: {$($key:expr => $value:expr),*$(,)?}) => {
$crate::log_internal!($level, $msg, None, $crate::create_attributes!($($key => $value),*))
};
($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();
}
};
}