stackable_telemetry/tracing/settings/
console_log.rs1use tracing::level_filters::LevelFilter;
4
5use super::{Settings, SettingsBuilder, SettingsToggle};
6
7#[derive(Debug, Default, PartialEq)]
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 ConsoleLogSettings::Disabled => false,
49 ConsoleLogSettings::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 ConsoleLogSettings::Enabled {
94 common_settings,
95 log_format: Default::default(),
96 }
97 }
98}
99
100impl<T> From<Option<T>> for ConsoleLogSettings
101where
102 T: Into<ConsoleLogSettings>,
103{
104 fn from(settings: Option<T>) -> Self {
105 match settings {
106 Some(settings) => settings.into(),
107 None => ConsoleLogSettings::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: Default::default(),
120 }
121 }
122}
123
124impl From<(&'static str, LevelFilter, bool)> for ConsoleLogSettings {
125 fn from(value: (&'static str, LevelFilter, bool)) -> Self {
126 match value.2 {
127 true => Self::Enabled {
128 common_settings: Settings {
129 environment_variable: value.0,
130 default_level: value.1,
131 },
132 log_format: Default::default(),
133 },
134 false => Self::Disabled,
135 }
136 }
137}
138
139#[cfg(test)]
140mod test {
141 use tracing::level_filters::LevelFilter;
142
143 use super::*;
144
145 #[test]
146 fn builds_settings() {
147 let expected = ConsoleLogSettings::Enabled {
148 common_settings: Settings {
149 environment_variable: "hello",
150 default_level: LevelFilter::DEBUG,
151 },
152 log_format: Format::Plain,
153 };
154 let result = Settings::builder()
155 .with_environment_variable("hello")
156 .with_default_level(LevelFilter::DEBUG)
157 .console_log_settings_builder()
158 .with_log_format(Format::Plain)
159 .build();
161
162 assert_eq!(expected, result);
163 }
164}