rustfoundry/telemetry/settings/
logging.rs1use crate::telemetry::settings::rate_limit::RateLimitingSettings;
2use crate::utils::feature_use;
3
4use std::path::PathBuf;
5
6feature_use!(cfg(feature = "settings"), {
7 use crate::settings::settings;
8});
9
10#[cfg(feature = "logging")]
13pub use slog::Level;
14
15#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
17#[cfg_attr(not(feature = "settings"), derive(Clone, Default, Debug))]
18pub struct LoggingSettings {
19 pub output: LogOutput,
21
22 pub format: LogFormat,
24
25 pub verbosity: LogVerbosity,
27
28 pub redact_keys: Vec<String>,
33
34 pub rate_limit: RateLimitingSettings,
36
37 pub log_volume_metrics: LogVolumeMetricSettings,
39}
40
41#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
43#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, Default))]
44pub enum LogOutput {
45 #[default]
47 Terminal,
48 File(PathBuf),
52}
53
54#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
56#[cfg_attr(not(feature = "settings"), derive(Clone, Default, Debug))]
57#[derive(Copy)]
58pub enum LogFormat {
59 #[default]
61 Text,
62 Json,
64}
65
66#[cfg_attr(
68 feature = "settings",
69 settings(crate_path = "crate", impl_default = false)
70)]
71#[cfg_attr(not(feature = "settings"), derive(Clone, Debug))]
72#[derive(Copy, Default)]
73pub enum LogVerbosity {
74 #[cfg_attr(feature = "settings", serde(rename = "CRITICAL"))]
76 Critical,
77 #[cfg_attr(feature = "settings", serde(rename = "ERROR"))]
79 Error,
80 #[cfg_attr(feature = "settings", serde(rename = "WARN"))]
82 Warning,
83 #[default]
85 #[cfg_attr(feature = "settings", serde(rename = "INFO"))]
86 Info,
87 #[cfg_attr(feature = "settings", serde(rename = "DEBUG"))]
89 Debug,
90 #[cfg_attr(feature = "settings", serde(rename = "TRACE"))]
92 Trace,
93}
94
95impl From<slog::Level> for LogVerbosity {
96 fn from(level: slog::Level) -> Self {
97 match level {
98 Level::Critical => Self::Critical,
99 Level::Warning => Self::Warning,
100 Level::Error => Self::Error,
101 Level::Info => Self::Info,
102 Level::Debug => Self::Debug,
103 Level::Trace => Self::Trace,
104 }
105 }
106}
107
108impl From<LogVerbosity> for slog::Level {
109 fn from(level: LogVerbosity) -> Self {
110 match level {
111 LogVerbosity::Critical => Self::Critical,
112 LogVerbosity::Warning => Self::Warning,
113 LogVerbosity::Error => Self::Error,
114 LogVerbosity::Info => Self::Info,
115 LogVerbosity::Debug => Self::Debug,
116 LogVerbosity::Trace => Self::Trace,
117 }
118 }
119}
120
121#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
126#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, Default))]
127pub struct LogVolumeMetricSettings {
128 pub enabled: bool,
130}