fn main() {
spdlog::info!("the default formatter for most sinks is `FullFormatter`");
use_pattern_formatter();
impl_manually();
}
fn use_pattern_formatter() {
use spdlog::{
formatter::{pattern, PatternFormatter},
prelude::*,
};
let new_formatter = Box::new(PatternFormatter::new(pattern!(
"{datetime} - {^{level}} - {payload}{eol}"
)));
for sink in spdlog::default_logger().sinks() {
sink.set_formatter(new_formatter.clone())
}
info!("format by `PatternFormatter`");
}
fn impl_manually() {
use std::fmt::Write as _;
use spdlog::{
formatter::{Formatter, FormatterContext},
prelude::*,
Record, StringBuf,
};
#[derive(Clone, Default)]
struct MyFormatter;
impl Formatter for MyFormatter {
fn format(
&self,
record: &Record,
dest: &mut StringBuf,
ctx: &mut FormatterContext,
) -> spdlog::Result<()> {
let style_range_begin = dest.len();
dest.write_str(&record.level().as_str().to_ascii_uppercase())
.map_err(spdlog::Error::FormatRecord)?;
let style_range_end = dest.len();
writeln!(dest, " {}", record.payload()).map_err(spdlog::Error::FormatRecord)?;
ctx.set_style_range(Some(style_range_begin..style_range_end));
Ok(())
}
}
let new_formatter = Box::new(MyFormatter);
for sink in spdlog::default_logger().sinks() {
sink.set_formatter(new_formatter.clone())
}
info!("format by `MyFormatter` (impl manually)");
}