summaryrefslogtreecommitdiffstats
path: root/src/logger.rs
blob: 25d6382fe0fa3a8847f2cee5cfd5f2f9f007d4a9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
use crate::config::WorkingMode;

use anyhow::Result;
use log::LevelFilter;
use simplelog::{format_description, Config as LogConfig, ConfigBuilder};

#[cfg(debug_assertions)]
pub fn setup_logger(working_mode: WorkingMode) -> Result<()> {
    let is_serve = working_mode.is_serve();
    let config = build_config(is_serve);
    if is_serve {
        simplelog::SimpleLogger::init(LevelFilter::Debug, config)?;
    } else {
        let file = std::fs::File::create(crate::config::Config::local_path("debug.log")?)?;
        simplelog::WriteLogger::init(LevelFilter::Debug, config, file)?;
    }
    Ok(())
}

#[cfg(not(debug_assertions))]
pub fn setup_logger(working_mode: WorkingMode) -> Result<()> {
    if working_mode.is_serve() {
        let config = build_config(true);
        simplelog::SimpleLogger::init(log::LevelFilter::Info, config)?;
    }
    Ok(())
}

fn build_config(is_serve: bool) -> LogConfig {
    let log_filter = if is_serve {
        "aichat::serve".into()
    } else {
        match std::env::var("AICHAT_LOG_FILTER") {
            Ok(v) => v,
            Err(_) => "aichat".into(),
        }
    };
    ConfigBuilder::new()
        .add_filter_allow(log_filter)
        .set_time_format_custom(format_description!(
            "[year]-[month]-[day]T[hour]:[minute]:[second].[subsecond digits:3]Z"
        ))
        .set_thread_level(LevelFilter::Off)
        .build()
}