use crate::telemetry::settings::rate_limit::RateLimitingSettings;
use crate::utils::feature_use;
use std::path::PathBuf;
feature_use!(cfg(feature = "settings"), {
use crate::settings::settings;
});
#[cfg(feature = "logging")]
pub use slog::Level;
#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
#[cfg_attr(not(feature = "settings"), derive(Clone, Default, Debug))]
pub struct LoggingSettings {
pub output: LogOutput,
pub format: LogFormat,
pub verbosity: LogVerbosity,
pub redact_keys: Vec<String>,
pub rate_limit: RateLimitingSettings,
pub log_volume_metrics: LogVolumeMetricSettings,
}
#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, Default))]
pub enum LogOutput {
#[default]
Terminal,
File(PathBuf),
}
#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
#[cfg_attr(not(feature = "settings"), derive(Clone, Default, Debug))]
#[derive(Copy)]
pub enum LogFormat {
#[default]
Text,
Json,
}
#[cfg_attr(
feature = "settings",
settings(crate_path = "crate", impl_default = false)
)]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug))]
#[derive(Copy, Default)]
pub enum LogVerbosity {
#[cfg_attr(feature = "settings", serde(rename = "CRITICAL"))]
Critical,
#[cfg_attr(feature = "settings", serde(rename = "ERROR"))]
Error,
#[cfg_attr(feature = "settings", serde(rename = "WARN"))]
Warning,
#[default]
#[cfg_attr(feature = "settings", serde(rename = "INFO"))]
Info,
#[cfg_attr(feature = "settings", serde(rename = "DEBUG"))]
Debug,
#[cfg_attr(feature = "settings", serde(rename = "TRACE"))]
Trace,
}
impl From<slog::Level> for LogVerbosity {
fn from(level: slog::Level) -> Self {
match level {
Level::Critical => Self::Critical,
Level::Warning => Self::Warning,
Level::Error => Self::Error,
Level::Info => Self::Info,
Level::Debug => Self::Debug,
Level::Trace => Self::Trace,
}
}
}
impl From<LogVerbosity> for slog::Level {
fn from(level: LogVerbosity) -> Self {
match level {
LogVerbosity::Critical => Self::Critical,
LogVerbosity::Warning => Self::Warning,
LogVerbosity::Error => Self::Error,
LogVerbosity::Info => Self::Info,
LogVerbosity::Debug => Self::Debug,
LogVerbosity::Trace => Self::Trace,
}
}
}
#[cfg_attr(feature = "settings", settings(crate_path = "crate"))]
#[cfg_attr(not(feature = "settings"), derive(Clone, Debug, Default))]
pub struct LogVolumeMetricSettings {
pub enabled: bool,
}