Как я могу предотвратить создание дополнительных файлов журналов в журналах журнала log4rs? - PullRequest
0 голосов
/ 22 января 2020

Я последовал за ответом на на этот вопрос и получил четыре файла журнала: 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)
}
...