Skip to main content

klauthed_observability/config/
log.rs

1//! Logging / tracing-subscriber settings: [`LogConfig`] and [`LogFormat`].
2
3use serde::{Deserialize, Serialize};
4
5/// Logging / tracing-subscriber settings.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct LogConfig {
8    /// Output format.
9    #[serde(default)]
10    pub format: LogFormat,
11    /// Filter directive (e.g. `info`, or `info,sqlx=warn`). `RUST_LOG` overrides it.
12    #[serde(default = "default_level")]
13    pub level: String,
14    /// Whether to colorize human-readable output.
15    #[serde(default = "default_true")]
16    pub ansi: bool,
17}
18
19fn default_level() -> String {
20    "info".to_owned()
21}
22fn default_true() -> bool {
23    true
24}
25
26impl Default for LogConfig {
27    fn default() -> Self {
28        Self { format: LogFormat::default(), level: default_level(), ansi: default_true() }
29    }
30}
31
32/// Log output format.
33#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
34#[serde(rename_all = "snake_case")]
35pub enum LogFormat {
36    /// Multi-line, colorized, developer-friendly.
37    #[default]
38    Pretty,
39    /// Single-line, terse.
40    Compact,
41    /// Structured JSON (one object per line) for log aggregation.
42    Json,
43}