summaryrefslogtreecommitdiffstats
path: root/src/config/mod.rs
diff options
context:
space:
mode:
authorsigoden <sigoden@gmail.com>2024-07-21 17:24:04 +0800
committerGitHub <noreply@github.com>2024-07-21 17:24:04 +0800
commit341f2d994295d1b88bb849d74893d62df610150c (patch)
tree565a3631fa6fa3e3fa7f8f2d7e8889a69175536b /src/config/mod.rs
parent17fd7b326097d43a20c7332031bc2f250dd8d4d0 (diff)
downloadaichat-341f2d994295d1b88bb849d74893d62df610150c.tar.gz
feat: enhance logger (#731)
Diffstat (limited to 'src/config/mod.rs')
-rw-r--r--src/config/mod.rs36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/config/mod.rs b/src/config/mod.rs
index 8116532..7b22496 100644
--- a/src/config/mod.rs
+++ b/src/config/mod.rs
@@ -23,6 +23,7 @@ use inquire::{Confirm, Select};
use parking_lot::RwLock;
use serde::Deserialize;
use serde_json::json;
+use simplelog::LevelFilter;
use std::collections::{HashMap, HashSet};
use std::{
env,
@@ -386,6 +387,36 @@ impl Config {
flags
}
+ pub fn log(is_serve: bool) -> Result<(LevelFilter, Option<PathBuf>)> {
+ let log_level = env::var(get_env_name("log_level"))
+ .ok()
+ .and_then(|v| v.parse().ok())
+ .unwrap_or(match cfg!(debug_assertions) {
+ true => LevelFilter::Debug,
+ false => {
+ if is_serve {
+ LevelFilter::Info
+ } else {
+ LevelFilter::Off
+ }
+ }
+ });
+ if log_level == LevelFilter::Off {
+ return Ok((log_level, None));
+ }
+ let log_path = match env::var(get_env_name("log_path")) {
+ Ok(v) => Some(PathBuf::from(v)),
+ Err(_) => match is_serve {
+ true => None,
+ false => Some(Config::local_path(&format!(
+ "{}.log",
+ env!("CARGO_CRATE_NAME")
+ ))?),
+ },
+ };
+ Ok((log_level, log_path))
+ }
+
pub fn current_model(&self) -> &Model {
if let Some(session) = self.session.as_ref() {
session.model()
@@ -466,7 +497,7 @@ impl Config {
.clone()
.map_or_else(|| String::from("no"), |v| v.to_string());
let role = self.extract_role();
- let items = vec![
+ let mut items = vec![
("model", role.model().id()),
(
"max_output_tokens",
@@ -509,6 +540,9 @@ impl Config {
("sessions_dir", display_path(&self.sessions_dir()?)),
("messages_file", display_path(&self.messages_file()?)),
];
+ if let Ok((_, Some(log_path))) = Self::log(self.working_mode.is_serve()) {
+ items.push(("log_path", display_path(&log_path)));
+ }
let output = items
.iter()
.map(|(name, value)| format!("{name:<24}{value}"))