diff --git a/Cargo.lock b/Cargo.lock index 9a2a092..208e29e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1966,6 +1966,7 @@ dependencies = [ "tokio-stream", "toml 0.9.12+spec-1.1.0", "tracing", + "tracing-appender", "tracing-subscriber", "url", "uuid", @@ -7816,6 +7817,12 @@ dependencies = [ "serde_json", ] +[[package]] +name = "symlink" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7973cce6668464ea31f176d85b13c7ab3bba2cb3b77a2ed26abd7801688010a" + [[package]] name = "syn" version = "1.0.109" @@ -8742,6 +8749,19 @@ dependencies = [ "tracing-core", ] +[[package]] +name = "tracing-appender" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "050686193eb999b4bb3bc2acfa891a13da00f79734704c4b8b4ef1a10b368a3c" +dependencies = [ + "crossbeam-channel", + "symlink", + "thiserror 2.0.18", + "time", + "tracing-subscriber", +] + [[package]] name = "tracing-attributes" version = "0.1.31" diff --git a/dataans/src-tauri/Cargo.toml b/dataans/src-tauri/Cargo.toml index c033b19..4f63ca3 100644 --- a/dataans/src-tauri/Cargo.toml +++ b/dataans/src-tauri/Cargo.toml @@ -36,6 +36,7 @@ tokio-stream = "0.1" # logging tracing-subscriber = { version = "0.3", features = ["std", "fmt", "ansi", "env-filter"] } +tracing-appender = "0.2" common = { path = "../common" } toml = "0.9" diff --git a/dataans/src-tauri/src/main.rs b/dataans/src-tauri/src/main.rs index ad68cbc..bcd2009 100644 --- a/dataans/src-tauri/src/main.rs +++ b/dataans/src-tauri/src/main.rs @@ -51,9 +51,9 @@ fn toggle_app_visibility(app: &AppHandle) -> Result<()> { } fn init_tracing(app_data: &Path) { - use std::fs::OpenOptions; use std::{fs, io}; + use tracing_appender::rolling::{Builder, Rotation}; use tracing_subscriber::EnvFilter; use tracing_subscriber::prelude::*; @@ -82,14 +82,21 @@ fn init_tracing(app_data: &Path) { } } - let log_file = logs_dir.join("dataans.log"); - match OpenOptions::new().create(true).append(true).open(&log_file) { - Ok(log_file) => { - let log_file_layer = tracing_subscriber::fmt::layer().pretty().with_writer(log_file); + // Rotates weekly and keeps at most 2 log files (the active one plus one previous week), + // deleting older ones automatically. + match Builder::new() + .rotation(Rotation::WEEKLY) + .filename_prefix("dataans") + .filename_suffix("log") + .max_log_files(2) + .build(&logs_dir) + { + Ok(file_appender) => { + let log_file_layer = tracing_subscriber::fmt::layer().pretty().with_writer(file_appender); registry.with(log_file_layer).with(logging_filter).init(); } Err(e) => { - eprintln!("Couldn't open log file: {e}. Path: {log_file:?}."); + eprintln!("Couldn't init the rolling log file appender: {e}. Path: {logs_dir:?}."); registry.with(logging_filter).init(); } }