tracing_logfmt/formatter/
builder.rs

1use tracing::Subscriber;
2use tracing_subscriber::{
3    fmt::{Layer, SubscriberBuilder},
4    registry::LookupSpan,
5};
6
7use crate::{EventsFormatter, FieldsFormatter};
8
9pub struct Builder {
10    events: EventsFormatter,
11    fields: FieldsFormatter,
12}
13
14/// Create a builder that can be used to configure the formatter.
15///
16/// Example:
17/// ```rust
18/// use tracing::dispatcher::{self, Dispatch};
19/// use tracing_subscriber::Registry;
20/// use tracing_subscriber::layer::SubscriberExt;
21///
22/// let subscriber = Registry::default()
23///     .with(tracing_logfmt::builder().with_span_path(false).layer());
24///
25/// dispatcher::set_global_default(Dispatch::new(subscriber))
26///     .expect("Global logger has already been set!");
27/// ```
28pub fn builder() -> Builder {
29    Builder::new()
30}
31
32impl Builder {
33    pub fn new() -> Self {
34        Self {
35            events: EventsFormatter::default(),
36            fields: FieldsFormatter::default(),
37        }
38    }
39
40    pub fn with_level(mut self, enable: bool) -> Self {
41        self.events.with_level = enable;
42        self
43    }
44    pub fn with_target(mut self, enable: bool) -> Self {
45        self.events.with_target = enable;
46        self
47    }
48    pub fn with_span_name(mut self, enable: bool) -> Self {
49        self.events.with_span_name = enable;
50        self
51    }
52    pub fn with_span_path(mut self, enable: bool) -> Self {
53        self.events.with_span_path = enable;
54        self
55    }
56    pub fn with_location(mut self, enable: bool) -> Self {
57        self.events.with_location = enable;
58        self
59    }
60    pub fn with_module_path(mut self, enable: bool) -> Self {
61        self.events.with_module_path = enable;
62        self
63    }
64    pub fn with_timestamp(mut self, enable: bool) -> Self {
65        self.events.with_timestamp = enable;
66        self
67    }
68    #[cfg(feature = "ansi_logs")]
69    pub fn with_ansi_color(mut self, enable: bool) -> Self {
70        self.events.with_ansi_color = enable;
71        self
72    }
73
74    pub fn layer<S>(self) -> Layer<S, FieldsFormatter, EventsFormatter>
75    where
76        S: Subscriber + for<'a> LookupSpan<'a>,
77    {
78        tracing_subscriber::fmt::layer()
79            .event_format(self.events)
80            .fmt_fields(self.fields)
81    }
82
83    pub fn subscriber_builder(self) -> SubscriberBuilder<FieldsFormatter, EventsFormatter> {
84        tracing_subscriber::fmt::Subscriber::builder()
85            .event_format(self.events)
86            .fmt_fields(self.fields)
87    }
88}
89
90impl Default for Builder {
91    fn default() -> Self {
92        Self::new()
93    }
94}