Вы можете реализовать это с помощью RollingFileAppender
CompoundPolicy
, FixedWindowRoller
и SizeTrigger
из log4rs
crate.
Для создания логики скользящего файла необходимо реализовать следующее:
FixedWindowRoller
Укажите FixedWindowRoller
длясверните ваш файл журнала в фиксированном window_size
как показано ниже:
let window_size = 3; // log0, log1, log2
let fixed_window_roller =
FixedWindowRoller::builder().build("log{}",window_size).unwrap();
SizeTrigger
Укажите SizeTrigger
, чтобы объявить ограничение размера файла для запуска Roller
следующим образом:
let size_limit = 5 * 1024; // 5KB as max log file size to roll
let size_trigger = SizeTrigger::new(size_limit);
CompoundPolicy
Объявите CompoundPolicy
, чтобы использовать его в RollingFileAppender
, как показано ниже:
let compound_policy = CompoundPolicy::new(Box::new(size_trigger),Box::new(fixed_window_roller));
Затем в вашем Config
вам необходимо использовать RollingFileAppender
, чтобы получить желаемое поведение.
let config = Config::builder()
.appender(
Appender::builder()
.filter(Box::new(ThresholdFilter::new(LevelFilter::Debug)))
.build(
"logfile",
Box::new(
RollingFileAppender::builder()
.encoder(Box::new(PatternEncoder::new("{d} {l}::{m}{n}")))
.build("logfile", Box::new(compound_policy))?,
),
),
)
.build(
Root::builder()
.appender("logfile")
.build(LevelFilter::Debug),
)?;
В этой реализации вы получаете скользящий файл для window size 3
и roll size 5KB
Примечание.: Если вы хотите иметь custom roller
и custom trigger
для своих собственных целей, вы можете реализовать свои собственные Trigger
и Roller
изсоответствующие черты