mclangc/src/logger/macros.rs
2024-03-14 09:13:01 +02:00

107 lines
3.6 KiB
Rust

#[macro_export]
macro_rules! log {
({$($k: expr => $v: expr),* $(,)? }, $lvl:expr, $($arg:tt),+) => {
crate::log_tagged!({$($k => $v,)*}, crate::logger::Level::Info, $($arg)+)
};
(module: $module:expr, $lvl:expr, $($arg:tt)+) => {
unsafe {
crate::logger::LOGGER.log(
crate::logger::LogEvent {
level: $lvl,
module_path: $module.to_string(),
message: format!($($arg)+),
tags: std::collections::HashMap::new()
}
)
}
};
($lvl:expr, $($arg:tt)+) => {
crate::log!(module: module_path!(), $lvl, $($arg)+)
};
}
#[macro_export]
macro_rules! log_tagged {
({$($k: expr => $v: expr),* $(,)? }, $module:expr, $lvl:expr, $($arg:tt)+) => {
unsafe {
crate::logger::LOGGER.log(
crate::logger::LogEvent {
level: $lvl,
module_path: $module.to_string(),
message: format!($($arg)+),
tags: map_macro::hash_map!{$(stringify!($k).to_string() => Box::new($v) as Box<dyn core::any::Any>,)*}
}
)
}
};
}
#[macro_export]
macro_rules! debug {
(module: $module:expr, $($arg:tt)+) => {
crate::log!(module: $module, crate::logger::Level::Debug, $($arg:tt)+)
};
({$($k: expr => $v: expr),* $(,)? }, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, module_path!(), crate::logger::Level::Debug, $($arg)+)
};
({$($k: expr => $v: expr),* $(,)? }, module: $module:expr, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, $module, crate::logger::Level::Debug, $($arg)+)
};
($($arg:tt)+) => {
crate::log!(crate::logger::Level::Debug, $($arg)+)
};
}
#[macro_export]
macro_rules! info {
(module: $module:expr, $($arg:tt)+) => {
crate::log!(module: $module, crate::logger::Level::Info, $($arg:tt)+)
};
({$($k: expr => $v: expr),* $(,)? }, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, module_path!(), crate::logger::Level::Info, $($arg)+)
};
({$($k: expr => $v: expr),* $(,)? }, module: $module:expr, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, $module, crate::logger::Level::Info, $($arg)+)
};
($($arg:tt)+) => {
crate::log!(crate::logger::Level::Info, $($arg)+)
};
}
#[macro_export]
macro_rules! warn {
(module: $module:expr, $($arg:tt)+) => {
crate::log!(module: $module, crate::logger::Level::Warn, $($arg:tt)+)
};
({$($k: expr => $v: expr),* $(,)? }, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, module_path!(), crate::logger::Level::Warn, $($arg)+)
};
({$($k: expr => $v: expr),* $(,)? }, module: $module:expr, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, $module, crate::logger::Level::Warn, $($arg)+)
};
($($arg:tt)+) => {
crate::log!(crate::logger::Level::Warn, $($arg)+)
};
}
#[macro_export]
macro_rules! error {
(module: $module:expr, $($arg:tt)+) => {
crate::log!(module: $module, crate::logger::Level::Error, $($arg:tt)+)
};
({$($k: expr => $v: expr),* $(,)? }, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, module_path!(), crate::logger::Level::Error, $($arg)+)
};
({$($k: expr => $v: expr),* $(,)? }, module: $module:expr, $($arg:tt)+) => {
crate::log_tagged!({$($k => $v,)*}, $module, crate::logger::Level::Error, $($arg)+)
};
($($arg:tt)+) => {
crate::log!(crate::logger::Level::Error, $($arg)+)
};
}