tracing_logfmt/formatter/
builder.rs1use 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
14pub 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}