#[macro_export]
macro_rules! async_log {
($level:expr, $msg:expr $(, $opt:expr)*) => {
{
use std::any::Any;
let mut context: rust_observer::tracing::OptionalTraceContext = None;
$(
if let Some(tc) = (&$opt as &dyn Any).downcast_ref::<Option<rust_observer::tracing::TraceContext>>() {
context = Some(tc.clone().unwrap());
}
)*
let message: std::borrow::Cow<'static, str> = std::borrow::Cow::Owned($msg.to_string());
let ts = rust_observer::chrono::Utc::now();
let target = module_path!();
let logger = rust_observer::logging::get_logger().await;
if let Some(logger_guard) = logger {
if let Some(logger) = logger_guard.as_ref() {
logger.log(rust_observer::logging::LogMessage {
timestamp: ts,
level: $level,
target,
message,
context: context.into(),
}).await;
}
} else {
eprintln!("Logger not initialized");
}
}
};
}
#[macro_export]
macro_rules! info {
($msg:expr $(, $opt:expr)*) => {
$crate::async_log!(rust_observer::logging::LogLevel::INFO, $msg $(, $opt)*)
};
}
#[macro_export]
macro_rules! warn {
($msg:expr $(, $opt:expr)*) => {
$crate::async_log!(rust_observer::logging::LogLevel::WARN, $msg $(, $opt)*)
};
}
#[macro_export]
macro_rules! error {
($msg:expr $(, $opt:expr)*) => {
$crate::async_log!(rust_observer::logging::LogLevel::ERROR, $msg $(, $opt)*)
};
}
#[macro_export]
macro_rules! fatal {
($msg:expr $(, $opt:expr)*) => {
$crate::async_log!(rust_observer::logging::LogLevel::FATAL, $msg $(, $opt)*)
};
}