Я последовал за ответом на на этот вопрос и получил четыре файла журнала: log0
, log1
, log2
и logfile
. Я ожидал только первые три.
Есть ли способ избежать последнего файла журнала (logfile
), который будет создан при определении RollingFileAppender
? Есть ли способ определения пути журнала только в FixedWindowRoller
?
pub fn init_logger<P: AsRef<Path>>(
level: log::LevelFilter,
data_dir: P,
name: String,
) -> Result<Handle, Error> {
fs::create_dir_all(&data_dir)?;
let mut file_path = data_dir.as_ref().to_path_buf();
let mut foo = "[{d(%Y-%m-%d %H:%M:%S)}] [".to_string();
foo.push_str(&name);
foo.push_str("] {h({l:5.15})} {M} -- {m}{n}");
let stdout = ConsoleAppender::builder()
.encoder(Box::new(PatternEncoder::new(&foo)))
.target(Target::Stdout)
.build();
let window_size = 3;
let pattern = file_path.clone().into_os_string().into_string().unwrap() + "/log{}";
let fixed_window_roller = FixedWindowRoller::builder()
.build(&pattern, window_size)
.unwrap();
let size_limit = 5 * 1024; // 5KB as max log file size to roll
let size_trigger = SizeTrigger::new(size_limit);
let compound_policy =
CompoundPolicy::new(Box::new(size_trigger), Box::new(fixed_window_roller));
let logfile = RollingFileAppender::builder()
.encoder(Box::new(PatternEncoder::new(
"[{d(%Y-%m-%d %H:%M:%S)}] [{t}] {l:5.15} {M} -- {m}{n}",
)))
.build("logfile", Box::new(compound_policy))
.unwrap();
let config = Config::builder()
.appender(Appender::builder().build("logfile", Box::new(logfile)))
.appender(
Appender::builder()
.filter(Box::new(ThresholdFilter::new(level)))
.build("stderr", Box::new(stdout)),
)
.build(
Root::builder()
.appender("logfile")
.appender("stderr")
.build(LevelFilter::Trace),
)
.unwrap();
let handle = log4rs::init_config(config).unwrap();
Ok(handle)
}