1use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt, EnvFilter};
4
5#[derive(Debug, Clone)]
7pub struct LogConfig {
8 pub level: String,
10 pub json: bool,
12 pub file: Option<String>,
14}
15
16impl Default for LogConfig {
17 fn default() -> Self {
18 Self {
19 level: "info".to_string(),
20 json: false,
21 file: None,
22 }
23 }
24}
25
26pub fn init_logging(config: LogConfig) {
28 let filter = EnvFilter::try_from_default_env()
29 .unwrap_or_else(|_| EnvFilter::new(&config.level));
30
31 tracing_subscriber::registry()
33 .with(filter)
34 .with(tracing_subscriber::fmt::layer())
35 .init();
36}
37
38pub fn init_default_logging() {
40 init_logging(LogConfig::default());
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46
47 #[test]
48 fn test_log_config_default() {
49 let config = LogConfig::default();
50 assert_eq!(config.level, "info");
51 assert!(!config.json);
52 assert!(config.file.is_none());
53 }
54}