#[macro_export]
macro_rules! debug_log {
($($arg:tt)*) => {
#[cfg(debug_assertions)]
rat_logger::debug!($($arg)*);
#[cfg(not(debug_assertions))]
{
}
};
}
#[macro_export]
macro_rules! trace_log {
($($arg:tt)*) => {
#[cfg(debug_assertions)]
rat_logger::trace!($($arg)*);
};
}
#[macro_export]
macro_rules! info_log {
($($arg:tt)*) => {
#[cfg(debug_assertions)]
rat_logger::info!($($arg)*);
};
}
#[macro_export]
macro_rules! warn_log {
($($arg:tt)*) => {
rat_logger::warn!($($arg)*);
};
}
#[macro_export]
macro_rules! error_log {
($($arg:tt)*) => {
rat_logger::error!($($arg)*);
};
}
#[macro_export]
macro_rules! perf_trace {
($($arg:tt)*) => {
#[cfg(all(debug_assertions, feature = "perf-trace"))]
{
use std::time::Instant;
static _COUNTER: std::sync::atomic::AtomicU64 = std::sync::atomic::AtomicU64::new(0);
let start = Instant::now();
let result = { $($arg)* };
let elapsed = start.elapsed();
let count = _COUNTER.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
if count % 1000 == 0 {
debug_log!("perf_trace: operation took {:?}", elapsed);
}
result
}
#[cfg(not(all(debug_assertions, feature = "perf-trace")))]
{ $($arg)* }
};
}