stackable_telemetry/tracing/settings/
mod.rs1use std::path::Path;
4
5use tracing::level_filters::LevelFilter;
6
7pub mod console_log;
8pub use console_log::*;
9
10pub mod file_log;
11pub use file_log::*;
12
13pub mod otlp_log;
14pub use otlp_log::*;
15
16pub mod otlp_trace;
17pub use otlp_trace::*;
18
19pub trait SettingsToggle {
21 fn is_enabled(&self) -> bool;
23
24 fn is_disabled(&self) -> bool {
26 !self.is_enabled()
27 }
28}
29
30#[derive(Debug, PartialEq)]
32pub struct Settings {
33 pub environment_variable: &'static str,
38
39 pub default_level: LevelFilter,
42}
43
44impl Settings {
45 pub fn builder() -> SettingsBuilder {
47 SettingsBuilder::default()
48 }
49}
50
51impl Default for Settings {
52 fn default() -> Self {
53 SettingsBuilder::default().build()
54 }
55}
56
57pub struct SettingsBuilder {
59 environment_variable: &'static str,
60 default_level: LevelFilter,
61}
62
63impl SettingsBuilder {
64 pub fn with_environment_variable(mut self, name: &'static str) -> Self {
69 self.environment_variable = name;
70 self
71 }
72
73 pub fn with_default_level(mut self, level: impl Into<LevelFilter>) -> Self {
78 self.default_level = level.into();
79 self
80 }
81
82 pub fn console_log_settings_builder(self) -> ConsoleLogSettingsBuilder {
84 self.into()
85 }
86
87 pub fn file_log_settings_builder(
89 self,
90 path: impl AsRef<Path>,
91 filename_suffix: impl Into<String>,
92 ) -> FileLogSettingsBuilder {
93 FileLogSettingsBuilder {
94 common_settings: self.build(),
95 file_log_dir: path.as_ref().to_path_buf(),
96 rotation_period: Rotation::NEVER,
97 filename_suffix: filename_suffix.into(),
98 max_log_files: None,
99 }
100 }
101
102 pub fn otlp_log_settings_builder(self) -> OtlpLogSettingsBuilder {
104 self.into()
105 }
106
107 pub fn otlp_trace_settings_builder(self) -> OtlpTraceSettingsBuilder {
109 self.into()
110 }
111
112 pub fn build(self) -> Settings {
114 Settings {
115 environment_variable: self.environment_variable,
116 default_level: self.default_level,
117 }
118 }
119}
120
121impl Default for SettingsBuilder {
122 fn default() -> Self {
123 Self {
124 environment_variable: "RUST_LOG",
125 default_level: LevelFilter::OFF,
126 }
127 }
128}
129
130#[cfg(test)]
131mod test {
132 use super::*;
133
134 #[test]
135 fn builds_settings() {
136 let expected = Settings {
137 environment_variable: "hello",
138 default_level: LevelFilter::DEBUG,
139 };
140 let result = Settings::builder()
141 .with_environment_variable("hello")
142 .with_default_level(LevelFilter::DEBUG)
143 .build();
144
145 assert_eq!(expected, result);
146 }
147}