use rat_logger::{Level, LevelFilter};
use std::io::Write;
use std::sync::atomic::{AtomicBool, Ordering};
use chrono::Local;
static INIT: std::sync::Once = std::sync::Once::new();
static INITIALIZED: AtomicBool = AtomicBool::new(false);
pub fn dns_format(
buf: &mut dyn std::io::Write,
record: &rat_logger::config::Record
) -> std::io::Result<()> {
let level = record.metadata.level;
let (level_color, level_bg, level_icon) = match level {
Level::Error => ("\x1b[97m", "\x1b[41m", "🚫"), Level::Warn => ("\x1b[30m", "\x1b[43m", "⚠️ "), Level::Info => ("\x1b[97m", "\x1b[42m", "🌐"), Level::Debug => ("\x1b[30m", "\x1b[46m", "🔍"), Level::Trace => ("\x1b[97m", "\x1b[45m", "📡"), };
let timestamp_color = "\x1b[90m"; let message_color = "\x1b[37m"; let reset = "\x1b[0m";
let now = Local::now();
let timestamp = now.format("%H:%M:%S%.3f");
writeln!(
buf,
"{}{} {}{}{:5}{} {} {}{}{}",
timestamp_color, timestamp, level_color, level_bg, level, reset, level_icon, message_color, record.args, reset )
}
pub fn init_dns_logger(level: LevelFilter) -> Result<(), Box<dyn std::error::Error>> {
INIT.call_once(|| {
INITIALIZED.store(true, Ordering::SeqCst);
});
rat_logger::core::set_max_level(level);
Ok(())
}
pub fn init_dns_logger_silent() -> Result<(), Box<dyn std::error::Error>> {
init_dns_logger(LevelFilter::Off)
}
pub fn is_dns_logger_initialized() -> bool {
INITIALIZED.load(Ordering::SeqCst)
}
#[macro_export]
macro_rules! dns_query {
($domain:expr, $record_type:expr) => {
$crate::info!("🔍 查询 {} 记录: {}", $record_type, $domain);
};
}
#[macro_export]
macro_rules! dns_response {
($domain:expr, $count:expr, $duration:expr) => {
$crate::info!("✅ {} 响应: {} 条记录 ({}ms)", $domain, $count, $duration);
};
}
#[macro_export]
macro_rules! dns_error {
($($arg:tt)*) => {
$crate::error!($($arg)*)
};
}
#[macro_export]
macro_rules! dns_debug {
($($arg:tt)*) => {
$crate::debug!($($arg)*)
};
}
#[macro_export]
macro_rules! dns_info {
($($arg:tt)*) => {
$crate::info!($($arg)*)
};
}
#[macro_export]
macro_rules! dns_warn {
($($arg:tt)*) => {
$crate::warn!($($arg)*)
};
}
#[macro_export]
macro_rules! dns_transport {
($($arg:tt)*) => {
$crate::info!($($arg)*)
};
}
#[macro_export]
macro_rules! dns_timeout {
($domain:expr, $timeout:expr) => {
$crate::warn!("⏰ {} 查询超时: {}ms", $domain, $timeout);
};
}
#[macro_export]
macro_rules! dns_cache_hit {
($domain:expr) => {
$crate::debug!("💾 缓存命中: {}", $domain);
};
}
#[macro_export]
macro_rules! dns_cache_miss {
($domain:expr) => {
$crate::debug!("🔄 缓存未命中: {}", $domain);
};
}
#[macro_export]
macro_rules! dns_upstream {
($server:expr, $domain:expr) => {
$crate::trace!("📡 上游服务器 {} 查询: {}", $server, $domain);
};
}
#[macro_export]
macro_rules! dns_strategy {
($strategy:expr, $domain:expr) => {
$crate::debug!("🎯 使用策略 {} 查询: {}", $strategy, $domain);
};
}