tracing_logfmt/formatter/
builder.rs1use tracing::Subscriber;
2use tracing_subscriber::{
3 fmt::{format::FmtSpan, Layer, SubscriberBuilder},
4 registry::LookupSpan,
5};
6
7use crate::{EventsFormatter, FieldsFormatter};
8
9pub struct Builder {
10 events: EventsFormatter,
11 fields: FieldsFormatter,
12 span_events: FmtSpan,
13}
14
15pub fn builder() -> Builder {
30 Builder::new()
31}
32
33impl Builder {
34 pub fn new() -> Self {
35 Self {
36 events: EventsFormatter::default(),
37 fields: FieldsFormatter::default(),
38 span_events: FmtSpan::NONE,
39 }
40 }
41
42 pub fn with_level(mut self, enable: bool) -> Self {
43 self.events.with_level = enable;
44 self
45 }
46 pub fn with_target(mut self, enable: bool) -> Self {
47 self.events.with_target = enable;
48 self
49 }
50 pub fn with_span_name(mut self, enable: bool) -> Self {
51 self.events.with_span_name = enable;
52 self
53 }
54 pub fn with_span_path(mut self, enable: bool) -> Self {
55 self.events.with_span_path = enable;
56 self
57 }
58 pub fn with_span_events(mut self, kind: FmtSpan) -> Self {
59 self.span_events = kind;
60 self
61 }
62 pub fn with_location(mut self, enable: bool) -> Self {
63 self.events.with_location = enable;
64 self
65 }
66 pub fn with_module_path(mut self, enable: bool) -> Self {
67 self.events.with_module_path = enable;
68 self
69 }
70 pub fn with_timestamp(mut self, enable: bool) -> Self {
71 self.events.with_timestamp = enable;
72 self
73 }
74
75 pub fn with_thread_names(mut self, enable: bool) -> Self {
76 self.events.with_thread_names = enable;
77 self
78 }
79
80 pub fn with_thread_ids(mut self, enable: bool) -> Self {
81 self.events.with_thread_ids = enable;
82 self
83 }
84 #[cfg(feature = "ansi_logs")]
85 pub fn with_ansi_color(mut self, enable: bool) -> Self {
86 self.events.with_ansi_color = enable;
87 self
88 }
89
90 pub fn layer<S>(self) -> Layer<S, FieldsFormatter, EventsFormatter>
91 where
92 S: Subscriber + for<'a> LookupSpan<'a>,
93 {
94 tracing_subscriber::fmt::layer()
95 .with_span_events(self.span_events)
96 .event_format(self.events)
97 .fmt_fields(self.fields)
98 }
99
100 pub fn subscriber_builder(self) -> SubscriberBuilder<FieldsFormatter, EventsFormatter> {
101 tracing_subscriber::fmt::Subscriber::builder()
102 .with_span_events(self.span_events)
103 .event_format(self.events)
104 .fmt_fields(self.fields)
105 }
106}
107
108impl Default for Builder {
109 fn default() -> Self {
110 Self::new()
111 }
112}