stackable_telemetry/tracing/settings/
console_log.rs1use tracing::level_filters::LevelFilter;
4
5use super::{Settings, SettingsBuilder, SettingsToggle};
6
7#[derive(Debug, Default, PartialEq, Eq)]
9pub enum ConsoleLogSettings {
10 #[default]
12 Disabled,
13
14 Enabled {
16 common_settings: Settings,
18
19 log_format: Format,
21 },
22}
23
24#[derive(Clone, Debug, Default, Eq, PartialEq, strum::EnumString, strum::Display)]
28#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
29#[strum(serialize_all = "snake_case")]
30pub enum Format {
31 #[default]
38 Plain,
39
40 Json,
42 }
44
45impl SettingsToggle for ConsoleLogSettings {
46 fn is_enabled(&self) -> bool {
47 match self {
48 Self::Disabled => false,
49 Self::Enabled { .. } => true,
50 }
51 }
52}
53
54pub struct ConsoleLogSettingsBuilder {
60 pub(crate) common_settings: Settings,
61 pub(crate) log_format: Format,
62}
63
64impl ConsoleLogSettingsBuilder {
65 pub fn with_log_format(mut self, format: Format) -> Self {
67 self.log_format = format;
68 self
69 }
70
71 pub fn build(self) -> ConsoleLogSettings {
73 ConsoleLogSettings::Enabled {
74 common_settings: self.common_settings,
75 log_format: self.log_format,
76 }
77 }
78}
79
80impl From<SettingsBuilder> for ConsoleLogSettingsBuilder {
83 fn from(value: SettingsBuilder) -> Self {
84 Self {
85 common_settings: value.build(),
86 log_format: Format::default(),
87 }
88 }
89}
90
91impl From<Settings> for ConsoleLogSettings {
92 fn from(common_settings: Settings) -> Self {
93 Self::Enabled {
94 common_settings,
95 log_format: Format::default(),
96 }
97 }
98}
99
100impl<T> From<Option<T>> for ConsoleLogSettings
101where
102 T: Into<Self>,
103{
104 fn from(settings: Option<T>) -> Self {
105 match settings {
106 Some(settings) => settings.into(),
107 None => Self::default(),
108 }
109 }
110}
111
112impl From<(&'static str, LevelFilter)> for ConsoleLogSettings {
113 fn from(value: (&'static str, LevelFilter)) -> Self {
114 Self::Enabled {
115 common_settings: Settings {
116 environment_variable: value.0,
117 default_level: value.1,
118 },
119 log_format: Format::default(),
120 }
121 }
122}
123
124impl From<(&'static str, LevelFilter, bool)> for ConsoleLogSettings {
125 fn from(value: (&'static str, LevelFilter, bool)) -> Self {
126 if value.2 {
127 Self::Enabled {
128 common_settings: Settings {
129 environment_variable: value.0,
130 default_level: value.1,
131 },
132 log_format: Format::default(),
133 }
134 } else {
135 Self::Disabled
136 }
137 }
138}
139
140#[cfg(test)]
141mod test {
142 use tracing::level_filters::LevelFilter;
143
144 use super::*;
145
146 #[test]
147 fn builds_settings() {
148 let expected = ConsoleLogSettings::Enabled {
149 common_settings: Settings {
150 environment_variable: "hello",
151 default_level: LevelFilter::DEBUG,
152 },
153 log_format: Format::Plain,
154 };
155 let result = Settings::builder()
156 .with_environment_variable("hello")
157 .with_default_level(LevelFilter::DEBUG)
158 .console_log_settings_builder()
159 .with_log_format(Format::Plain)
160 .build();
162
163 assert_eq!(expected, result);
164 }
165}