04_format/
04-format.rs

1fn main() {
2    spdlog::info!("the default formatter for most sinks is `FullFormatter`");
3
4    // There are two ways to set up custom formats
5
6    // 1. This is the easiest and most convenient way
7    use_pattern_formatter();
8
9    // 2. When you need to implement more complex formatting logic
10    impl_manually();
11}
12
13fn use_pattern_formatter() {
14    use spdlog::{
15        formatter::{pattern, PatternFormatter},
16        prelude::*,
17    };
18
19    // Building a pattern formatter with a pattern.
20    // The `pattern!` macro will parse the template string at compile-time.
21    let new_formatter = Box::new(PatternFormatter::new(pattern!(
22        "{datetime} - {^{level}} - {payload}{eol}"
23    )));
24
25    // Setting the new formatter for each sink of the default logger.
26    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    // Building a custom formatter.
67    let new_formatter = Box::new(MyFormatter);
68
69    // Setting the new formatter for each sink of the default logger.
70    for sink in spdlog::default_logger().sinks() {
71        sink.set_formatter(new_formatter.clone())
72    }
73
74    info!("format by `MyFormatter` (impl manually)");
75}