diff --git a/Cargo.toml b/Cargo.toml index 6ea1ae6..68809bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -49,7 +49,7 @@ textwrap = "0.16.0" ansi_colours = "1.2.2" eventsource-stream = "0.2.3" log = "0.4.28" -log4rs = { version = "1.4.0", features = ["file_appender"] } +log4rs = { version = "1.4.0", features = ["file_appender", "rolling_file_appender", "compound_policy", "fixed_window_roller", "size_trigger"] } shell-words = "1.1.0" sha2 = "0.10.8" unicode-width = "0.2.0" diff --git a/src/main.rs b/src/main.rs index 218bdb2..d97eda1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,7 +39,10 @@ use client::ClientConfig; use inquire::{Select, Text, set_global_render_config}; use log::{LevelFilter, warn}; use log4rs::append::console::ConsoleAppender; -use log4rs::append::file::FileAppender; +use log4rs::append::rolling_file::RollingFileAppender; +use log4rs::append::rolling_file::policy::compound::CompoundPolicy; +use log4rs::append::rolling_file::policy::compound::roll::fixed_window::FixedWindowRoller; +use log4rs::append::rolling_file::policy::compound::trigger::size::SizeTrigger; use log4rs::config::{Appender, Logger, Root}; use log4rs::encode::pattern::PatternEncoder; use oauth::OAuthProvider; @@ -585,7 +588,20 @@ fn setup_logger() -> Result> { } Some(path) => { ensure_parent_exists(&path)?; - let file_appender = FileAppender::builder().encoder(encoder.clone()).build(path); + + let archive_pattern = path + .with_extension("archived.{}.log") + .to_string_lossy() + .into_owned(); + let trigger = SizeTrigger::new(10 * 1024 * 1024); + let roller = FixedWindowRoller::builder() + .build(&archive_pattern, 5) + .unwrap(); + let policy = CompoundPolicy::new(Box::new(trigger), Box::new(roller)); + + let file_appender = RollingFileAppender::builder() + .encoder(encoder.clone()) + .build(path, Box::new(policy)); match file_appender { Ok(appender) => { @@ -608,7 +624,7 @@ fn setup_logger() -> Result> { fn init_file_logger( log_level: LevelFilter, log_filter: Option, - file_appender: FileAppender, + file_appender: RollingFileAppender, ) -> log4rs::Config { let root_log_level = if log_filter.is_some() { LevelFilter::Off