si_observability/
clap4.rs1use clap4 as clap;
4use tracing::level_filters::LevelFilter;
5
6use crate::sealed::ConfigurationSealed;
7use crate::{Configuration, StderrLogFormat};
8
9#[derive(Debug, Clone, clap::Parser)]
11pub struct LoggingArgs {
12 #[clap(long)]
14 log_format: Option<LogFormatArg>,
15 #[clap(long)]
17 log_level: Option<LogLevelArg>,
18}
19
20impl ConfigurationSealed for LoggingArgs {}
21
22impl Configuration for LoggingArgs {
23 fn apply_to(&self, initializer: &mut crate::Initializer) {
24 if let Some(log_format) = &self.log_format {
25 initializer.stderr_logging_format = Some(match log_format {
26 LogFormatArg::Compact => StderrLogFormat::Compact,
27 LogFormatArg::Full => StderrLogFormat::Full,
28 });
29 }
30 if let Some(log_level) = &self.log_level {
31 initializer.stderr_default_level = match log_level {
32 LogLevelArg::Off => LevelFilter::OFF,
33 LogLevelArg::Error => LevelFilter::ERROR,
34 LogLevelArg::Warn => LevelFilter::WARN,
35 LogLevelArg::Info => LevelFilter::INFO,
36 LogLevelArg::Debug => LevelFilter::DEBUG,
37 LogLevelArg::Trace => LevelFilter::TRACE,
38 };
39 }
40 }
41}
42
43#[derive(Debug, Clone, clap::ValueEnum)]
45enum LogFormatArg {
46 Compact,
48 Full,
50}
51
52#[derive(Debug, Clone, clap::ValueEnum)]
54enum LogLevelArg {
55 Off,
57 Error,
59 Warn,
61 Info,
63 Debug,
65 Trace,
67}