1use std::env;
2use std::fs::OpenOptions;
3use std::path::PathBuf;
4use tracing_subscriber::{fmt, EnvFilter};
5
6#[allow(dead_code)]
7pub fn init_logging() {
8 let home = env::var("HOME").unwrap_or_else(|_| ".".to_string());
10 let log_dir = PathBuf::from(home).join(".limit").join("logs");
11
12 let _ = std::fs::create_dir_all(&log_dir);
13
14 let log_path = log_dir.join("tui.log");
15
16 let file = OpenOptions::new().create(true).append(true).open(&log_path);
18
19 match file {
20 Ok(f) => {
21 let default_level = if cfg!(debug_assertions) {
22 "debug,limit_llm=debug,limit_agent=debug,limit_cli=debug,reqwest=warn,hyper=warn"
23 } else {
24 "warn,limit_llm=warn,limit_agent=warn,limit_cli=warn,reqwest=warn,hyper=warn"
25 };
26 let filter =
27 EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(default_level));
28
29 fmt()
30 .with_writer(f)
31 .with_target(true)
32 .with_ansi(false)
33 .with_env_filter(filter)
34 .init();
35
36 tracing::info!("=== Logging initialized to {:?} ===", log_path);
37 }
38 Err(e) => {
39 eprintln!("Warning: Could not open log file {:?}: {}", log_path, e);
40 let default_level = if cfg!(debug_assertions) {
42 "debug"
43 } else {
44 "warn"
45 };
46 let filter =
47 EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(default_level));
48
49 fmt().with_env_filter(filter).init();
50 }
51 }
52}