diff options
Diffstat (limited to 'src/logger.rs')
| -rw-r--r-- | src/logger.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/logger.rs b/src/logger.rs new file mode 100644 index 0000000..f7ef2f5 --- /dev/null +++ b/src/logger.rs @@ -0,0 +1,40 @@ +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 config = build_config(); + if working_mode == WorkingMode::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<()> { + let config = build_config(); + if working_mode == WorkingMode::Serve { + simplelog::SimpleLogger::init(log::LevelFilter::Info, config)?; + } + Ok(()) +} + +fn build_config() -> LogConfig { + let log_filter = 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() +} |
