Skip to main content

limit_cli/
logging.rs

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    // Create log file in ~/.limit/logs/
9    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    // Open file in append mode
17    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            // Fallback to stderr
41            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}