From dd93fe117dd28e6fa8b015c1a27fc7a1d0ab0539 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Thu, 25 Jun 2026 13:29:56 -0600 Subject: [PATCH] feat: Implemented log rolling so the log file doesn't just grow exponentially [#60] --- Cargo.toml | 2 +- src/utils.rs | 21 ++++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index babd875..a7f63b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ derivative = "2.2.0" human-panic = "2.0.6" indoc = "2.0.7" log = "0.4.29" -log4rs = { version = "1.4.0", features = ["file_appender"] } +log4rs = { version = "1.4.0", features = ["rolling_file_appender", "compound_policy", "size_trigger", "fixed_window_roller"] } regex = "1.12.2" reqwest = { version = "0.13.2", features = ["json"] } serde_yaml = "0.9.34" diff --git a/src/utils.rs b/src/utils.rs index 7dd2e5a..904ae20 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -10,7 +10,10 @@ use anyhow::{Context, anyhow}; use colored::Colorize; use indicatif::{ProgressBar, ProgressStyle}; use log::{LevelFilter, error}; -use log4rs::append::file::FileAppender; +use log4rs::append::rolling_file::policy::compound::roll::fixed_window::FixedWindowRoller; +use log4rs::append::rolling_file::policy::compound::trigger::size::SizeTrigger; +use log4rs::append::rolling_file::policy::compound::CompoundPolicy; +use log4rs::append::rolling_file::RollingFileAppender; use log4rs::config::{Appender, Root}; use log4rs::encode::pattern::PatternEncoder; use regex::Regex; @@ -47,11 +50,23 @@ pub fn get_log_path() -> PathBuf { } pub fn init_logging_config() -> log4rs::Config { - let logfile = FileAppender::builder() + let log_path = get_log_path(); + let archive_pattern = log_path + .with_file_name("managarr.{}.log") + .to_string_lossy() + .into_owned(); + + let trigger = SizeTrigger::new(10 * 1024 * 1024); + let roller = FixedWindowRoller::builder() + .build(&archive_pattern, 3) + .unwrap(); + let policy = CompoundPolicy::new(Box::new(trigger), Box::new(roller)); + + let logfile = RollingFileAppender::builder() .encoder(Box::new(PatternEncoder::new( "{d(%Y-%m-%d %H:%M:%S%.3f)(utc)} <{i}> [{l}] {f}:{L} - {m}{n}", ))) - .build(get_log_path()) + .build(log_path, Box::new(policy)) .unwrap(); log4rs::Config::builder()