1use tracing_subscriber::{EnvFilter, fmt};
2
3use crate::core::{CoreError, CoreResult};
4
5#[derive(Debug, Clone, PartialEq, Eq)]
7pub struct LogConfig {
8 pub filter: String,
10 pub ansi: bool,
12}
13
14impl Default for LogConfig {
15 fn default() -> Self {
16 Self {
17 filter: "info".to_string(),
18 ansi: true,
19 }
20 }
21}
22
23pub fn init_tracing(config: LogConfig) -> CoreResult<()> {
28 let filter = EnvFilter::try_new(config.filter).unwrap_or_else(|_| EnvFilter::new("info"));
29 fmt()
30 .with_env_filter(filter)
31 .with_ansi(config.ansi)
32 .try_init()
33 .map_err(|_| CoreError::SubscriberInit)
34}
35
36#[cfg(test)]
37mod tests {
38 use super::{LogConfig, init_tracing};
39
40 #[test]
41 fn init_tracing_is_callable() {
42 let _ = init_tracing(LogConfig {
43 filter: "debug".to_string(),
44 ansi: false,
45 });
46 }
47}