🚧 [config] Opciones enumeradas para el log

This commit is contained in:
Manuel Cillero 2025-12-15 20:51:23 +01:00
parent cdc9357b5a
commit c985744ab0
4 changed files with 126 additions and 31 deletions

51
src/global/log_rolling.rs Normal file
View file

@ -0,0 +1,51 @@
use crate::AutoDefault;
use serde::{Deserialize, Deserializer};
/// Modos de salida y rotación para el registro de trazas.
///
/// El valor se obtiene de [`global::SETTINGS.log.rolling`](crate::global::Log::rolling) y
/// determina si las trazas se muestran por pantalla o se vuelcan en archivos con rotación.
/// El valor configurado no distingue entre mayúsculas y minúsculas.
#[derive(AutoDefault, Clone, Copy, Debug, Eq, PartialEq)]
pub enum LogRolling {
/// Escribe las trazas en la salida estándar (sin rotación de archivos).
Stdout,
/// Rotación diaria de archivos de traza.
#[default]
Daily,
/// Rotación horaria de archivos de traza.
Hourly,
/// Rotación por minutos de archivos de traza.
Minutely,
/// Archivo de traza "infinito", sin rotación.
Endless,
}
impl<'de> Deserialize<'de> for LogRolling {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let raw = String::deserialize(deserializer)?;
let result = match raw.trim().to_ascii_lowercase().as_str() {
"stdout" => Self::Stdout,
"daily" => Self::Daily,
"hourly" => Self::Hourly,
"minutely" => Self::Minutely,
"endless" => Self::Endless,
_ => {
let default = Self::default();
println!(
concat!(
"\nInvalid value \"{}\" for [log].rolling. ",
"Using \"{:?}\". Check settings.",
),
raw, default,
);
default
}
};
Ok(result)
}
}