gpt4 book ai didi

rust - 如何使用 log4rs 的 RollingFileAppender 合并滚动日志记录?

转载 作者:行者123 更新时间:2023-11-29 08:12:01 32 4
gpt4 key购买 nike

我正在尝试基于滚动策略构建一个记录器。下面是我能够实现的最接近的:

let logfile = FileAppender::builder()
.encoder(Box::new(PatternEncoder::new("{d} {l}::{m}{n}")))
.build("log/output.log")?;

let config = Config::builder()
.appender(Appender::builder().build("logfile", Box::new(logfile)))
.build(Root::builder()
.appender("logfile")
.build(LevelFilter::Debug))?;

log4rs::init_config(config)?;

这有助于我记录所有级别的消息。但是,长时间记录到一个文件可能是一个危险的提议。因此,我正在寻找可以限制保留的日志数据量的东西。我遇到了RollingFileAppender , 但我找不到 Policy 的正确用法.

请指导我完成此操作。我主要在寻找程序化配置。

最佳答案

您可以通过使用 RollingFileAppender 来实现它CompoundPolicy , FixedWindowRollerSizeTrigger来自 log4rs 箱子。

您需要实现以下内容才能创建滚动文件逻辑:

  1. FixedWindowRoller

指定 FixedWindowRoller 以固定的 window_size 滚动日志文件,如下所示:

let window_size = 3; // log0, log1, log2
let fixed_window_roller =
FixedWindowRoller::builder().build("log{}",window_size).unwrap();
  1. 大小触发器

指定 SizeTrigger 来声明文件的大小限制以触发 Roller,如下所示:

let size_limit = 5 * 1024; // 5KB as max log file size to roll
let size_trigger = SizeTrigger::new(size_limit);
  1. 复合策略

声明 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 3roll size 5KB

的滚动文件

如果你想压缩滚动的文件,你可以在你的滚动文件扩展名中定义它。您可以将扩展名指定为 log{}.gz

而不是 log{}

但是,如果您想启用日志文件压缩,您需要在 cargo.toml 中启用此功能,如下所示:

log4rs = { version ="1.0.0", features = ["gzip"] }

注意: 如果您想为自己的目的使用自定义滚轮自定义触发器,您可以实现自己的TriggerRoller来自各自的特质

关于rust - 如何使用 log4rs 的 RollingFileAppender 合并滚动日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56345288/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com