elfo_core/logging/
config.rs1use serde::{Deserialize, Deserializer};
6use tracing::level_filters::LevelFilter;
7
8#[derive(Debug, Deserialize)]
17#[serde(default)]
18pub struct LoggingConfig {
19 #[serde(deserialize_with = "deserialize_level_filter")]
23 pub max_level: LevelFilter,
24 pub max_rate_per_level: u64,
28}
29
30impl Default for LoggingConfig {
31 fn default() -> Self {
32 Self {
33 max_level: LevelFilter::INFO,
34 max_rate_per_level: 1000,
35 }
36 }
37}
38
39fn deserialize_level_filter<'de, D>(deserializer: D) -> Result<LevelFilter, D::Error>
40where
41 D: Deserializer<'de>,
42{
43 use PrettyLevelFilter::*;
44
45 #[derive(Deserialize)]
46 pub(crate) enum PrettyLevelFilter {
47 Trace,
48 Debug,
49 Info,
50 Warn,
51 Error,
52 Off,
53 }
54
55 let pretty = PrettyLevelFilter::deserialize(deserializer)?;
56
57 Ok(match pretty {
58 Trace => LevelFilter::TRACE,
59 Debug => LevelFilter::DEBUG,
60 Info => LevelFilter::INFO,
61 Warn => LevelFilter::WARN,
62 Error => LevelFilter::ERROR,
63 Off => LevelFilter::OFF,
64 })
65}