#filter #log4rs #logging #log #log-level #config-file

log4rs_dynamic_filters

log4rs的编程控制过滤器

4个版本

0.1.3 2022年11月18日
0.1.2 2022年10月4日
0.1.1 2022年10月4日
0.1.0 2022年10月2日

#523 in 配置

MIT/Apache

13KB
140

log4rs 动态过滤器

此crate提供了可以运行时动态控制的log4rs过滤器。

没有此crate,log4rs可以通过以下两种方式之一进行配置

  1. 编程构造Config
  2. .yaml文件中读取

前者详细且不灵活;然而,以这种方式初始化记录器会为您提供可以在以后用于替换配置的Handle。后者简单且灵活,甚至允许在运行时更新配置而不需要重新启动应用程序。但是,使用配置文件意味着您根本无法以编程方式调整配置(除非以编程方式重写配置文件,这远远不是一种理想的解决方案)。无法获取Handle,即使您获得了,如果文件被修改会发生什么?您如何集成来自两个来源的更改?

此crate提供了最佳方案,即动态过滤器:可以在配置文件中指定(带有默认值)的过滤器,也可以以编程方式修改。更改配置文件中动态过滤器的默认值将不会对已运行的应用程序产生影响。

此crate目前提供了一个动态过滤器:DynamicLevelFilter,它是ThresholdFilter的动态等价物。

示例用法

log4rs.yaml

refresh_rate: 1 minute

appenders:
  my_appender:
    kind: console
    filters:
      - kind: dynamic_level
        name: my_dynamic_filter
        default: info

root:
  level: trace
  appenders:
    - my_appender

main.rs

use log::{info, LevelFilter};
use log4rs_dynamic_filters::{default_deserializers, DynamicLevelFilter};

fn main() {
    log4rs::init_file("log4rs.yaml", default_deserializers())
        .expect("Failed to initialise logging");
    
    info!("This message will be accepted");
    DynamicLevelFilter::set("my_dynamic_filter", LevelFilter::Warn);
    info!("This message will be rejected by the filter");
}

许可证

在您选择的情况下,根据Apache License,版本2.0MIT许可证许可。

除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何旨在包含在此crate中的贡献,应按上述方式双重许可,不附加任何其他条款或条件。

依赖关系

~1.3–2.1MB
~44K SLoC