1fn main() {
2 spdlog::info!("the default formatter for most sinks is `FullFormatter`");
3
4 use_pattern_formatter();
8
9 impl_manually();
11}
12
13fn use_pattern_formatter() {
14 use spdlog::{
15 formatter::{pattern, PatternFormatter},
16 prelude::*,
17 };
18
19 let new_formatter = Box::new(PatternFormatter::new(pattern!(
22 "{datetime} - {^{level}} - {payload}{eol}"
23 )));
24
25 for sink in spdlog::default_logger().sinks() {
27 sink.set_formatter(new_formatter.clone())
28 }
29
30 info!("format by `PatternFormatter`");
31}
32
33fn impl_manually() {
34 use std::fmt::Write;
35
36 use spdlog::{
37 formatter::{Formatter, FormatterContext},
38 prelude::*,
39 Record, StringBuf,
40 };
41
42 #[derive(Clone, Default)]
43 struct MyFormatter;
44
45 impl Formatter for MyFormatter {
46 fn format(
47 &self,
48 record: &Record,
49 dest: &mut StringBuf,
50 ctx: &mut FormatterContext,
51 ) -> spdlog::Result<()> {
52 let style_range_begin = dest.len();
53
54 dest.write_str(&record.level().as_str().to_ascii_uppercase())
55 .map_err(spdlog::Error::FormatRecord)?;
56
57 let style_range_end = dest.len();
58
59 writeln!(dest, " {}", record.payload()).map_err(spdlog::Error::FormatRecord)?;
60
61 ctx.set_style_range(Some(style_range_begin..style_range_end));
62 Ok(())
63 }
64 }
65
66 let new_formatter = Box::new(MyFormatter);
68
69 for sink in spdlog::default_logger().sinks() {
71 sink.set_formatter(new_formatter.clone())
72 }
73
74 info!("format by `MyFormatter` (impl manually)");
75}