use crate::DeferredNow;
use log::Record;
use std::thread;
pub fn default_format(
w: &mut dyn std::io::Write,
_now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
write!(
w,
"{} [{}] {}",
record.level(),
record.module_path().unwrap_or("<unnamed>"),
record.args()
)
}
#[cfg(feature = "colors")]
pub fn colored_default_format(
w: &mut dyn std::io::Write,
_now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
let level = record.level();
write!(
w,
"{} [{}] {}",
style(level, level),
record.module_path().unwrap_or("<unnamed>"),
style(level, record.args())
)
}
pub fn opt_format(
w: &mut dyn std::io::Write,
now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
write!(
w,
"[{}] {} [{}:{}] {}",
now.now().format("%Y-%m-%d %H:%M:%S%.6f %:z"),
record.level(),
record.file().unwrap_or("<unnamed>"),
record.line().unwrap_or(0),
&record.args()
)
}
#[cfg(feature = "colors")]
pub fn colored_opt_format(
w: &mut dyn std::io::Write,
now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
let level = record.level();
write!(
w,
"[{}] {} [{}:{}] {}",
style(level, now.now().format("%Y-%m-%d %H:%M:%S%.6f %:z")),
style(level, level),
record.file().unwrap_or("<unnamed>"),
record.line().unwrap_or(0),
style(level, &record.args())
)
}
pub fn detailed_format(
w: &mut dyn std::io::Write,
now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
write!(
w,
"[{}] {} [{}] {}:{}: {}",
now.now().format("%Y-%m-%d %H:%M:%S%.6f %:z"),
record.level(),
record.module_path().unwrap_or("<unnamed>"),
record.file().unwrap_or("<unnamed>"),
record.line().unwrap_or(0),
&record.args()
)
}
#[cfg(feature = "colors")]
pub fn colored_detailed_format(
w: &mut dyn std::io::Write,
now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
let level = record.level();
write!(
w,
"[{}] {} [{}] {}:{}: {}",
style(level, now.now().format("%Y-%m-%d %H:%M:%S%.6f %:z")),
style(level, record.level()),
record.module_path().unwrap_or("<unnamed>"),
record.file().unwrap_or("<unnamed>"),
record.line().unwrap_or(0),
style(level, &record.args())
)
}
pub fn with_thread(
w: &mut dyn std::io::Write,
now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
write!(
w,
"[{}] T[{:?}] {} [{}:{}] {}",
now.now().format("%Y-%m-%d %H:%M:%S%.6f %:z"),
thread::current().name().unwrap_or("<unnamed>"),
record.level(),
record.file().unwrap_or("<unnamed>"),
record.line().unwrap_or(0),
&record.args()
)
}
#[cfg(feature = "colors")]
pub fn colored_with_thread(
w: &mut dyn std::io::Write,
now: &mut DeferredNow,
record: &Record,
) -> Result<(), std::io::Error> {
let level = record.level();
write!(
w,
"[{}] T[{:?}] {} [{}:{}] {}",
style(level, now.now().format("%Y-%m-%d %H:%M:%S%.6f %:z")),
style(level, thread::current().name().unwrap_or("<unnamed>")),
style(level, level),
record.file().unwrap_or("<unnamed>"),
record.line().unwrap_or(0),
style(level, &record.args())
)
}
#[cfg(feature = "colors")]
pub fn style<T>(level: log::Level, item: T) -> yansi::Paint<T> {
match level {
log::Level::Error => yansi::Paint::fixed(196, item).bold(),
log::Level::Warn => yansi::Paint::fixed(208, item).bold(),
log::Level::Info => yansi::Paint::new(item),
log::Level::Debug => yansi::Paint::fixed(7, item),
log::Level::Trace => yansi::Paint::fixed(8, item),
}
}