Rust 包 log4rs 的配置文件中文说明

19

Rust 包 log4rs 的配置文件中文说明

使用配置文件:

log4rs::init_file("log4rs.yml", Default::default()).unwrap();

共同字段

  • LevelFilter

    • Off
    • Error
    • Warn
    • Info
    • Debug
    • Trace
  • Filters

    只有一个值:level,必须是LevelFilter其中之一

    filters:
      - kind: threshold
        level: info
    
  • Encoder

    kind 默认是 pattern,或者可以指定为 jsonpattern 未指定时,默认为 {d} {l} {t} - {m}{n}

    pattern的取值可在log4rs::encode::pattern - Rust查看

    encoder:
      kind: pattern
      pattern: "{h({d(%+)(utc)} [{f}:{L}] {l:<6} {M}:{m})}{n}"
    
  • Loggers

    logger 配置表

  • Logger Configuration

    儿子级字段就是 logger 的名称

    字段必须可选项默认含义
    levelfalseLevelFilter与父级相同日志等级
    appendersfalselist[appenders]记录器
    additivefalsetrue/falsetrue父节点是否也将附加到此日志记录器
    loggers:
      my_logger:
        level: info
        appenders:
          - my_appender
        additive: true
    
  • Root Logger

    必须字段

    root:
      level: info
      appenders:
        - my_appender
    
    

refresh_rate

接受一个u64类型的值,单位为秒,用于指定多久扫描一次配置文件,以检查是否有变化,如有变化,会重新配置记录器

refresh_rate: 30 seconds

Appenders

所有 appender 的名称都必须是唯一的,kind 字段是必须的,值不同对应的配置项也不同。

Console

字段必须可选项默认含义
targetfalsestdout/stderrstdout输出方式
tty_onlyfalsetrue/falsefalse日志消息只在输出目标是终端时才会被写入
encoderfalseEncoder输出格式

Example

 my_console_appender:
   kind: console
   target: stdout
   tty_only: false

File

字段必须可选项默认含义
pathtrue环境变量可使用$ENV{name_here}格式文件保存位置
encoderfalseEncoder输出格式
appendfalsetrue/falsetruetrue: 文件后追加
false:删除原文件
my_file_appender:
  kind: file
  path: $ENV{PWD}/log/test.log
  append: true

Rolling File

这个配置起来很复杂,File的配置项都支持。多了一个policy 字段,唯一支持的 kind 的值是 compound

roller

支持两种模式:

  • delete 不需要额外字段,文件达到指定的大小或时间限制时,旧文件会被直接删除。

    roller:
      kind: delete
    
  • fixed_window 需要三个配置字段:

    • pattern 用于重命名文件的模式。模式中必须包含双大括号 {},用于被替换为配置文件的索引数字,如果扩展名时 .gz 且添加了 gzip feature,那么归档的文件会被压缩
    • base:滚动文件的起始索引
    • count:滚动文件的最大索引
    roller:
      kind: fixed_window
      base: 1
      count: 5
      pattern: "archive/journey-service.{}.log"
    

trigger

用来定义什么时候滚动文件(创建一个新的日志文件)

支持两种触发器(kind):

  • size

    使用 limit 字段规定最大文件大小,必须,单位:

    • b
    • kb/kib
    • mb/mib
    • gb/gib
    • tb/tib
    trigger:
      kind: size
      limit: 10 mb
    
  • time

    • interval:必须,多久运行一次,可选单位:

      • second[s]
      • minute[s]
      • hour[s]
      • day[s]
      • week[s]
      • month[s]
      • year[s]
    • modulate:可选,不太懂,应该是设置为true之后从0点开始的interval时间段之后的时间点,谷歌翻译:

      The modulate field is an optional boolean. It indicates whether the interval should be adjusted to cause the next rollover to occur on the interval boundary. For example, if the interval is 4 hours and the current hour is 3 am, when true, the first rollover will occur at 4 am and then next ones will occur at 8 am, noon, 4pm, etc. The default value is false.

      它指示是否应调整间隔以使下一次翻转发生在间隔边界上。例如,如果间隔为 4 小时,当前时间为凌晨 3 点,则为 true 时,第一次滚动将在凌晨 4 点发生,然后下一次滚动将在上午 8 点、中午、下午 4 点等发生。默认值为 false。

    • max_random_delay:随机一段时间的延迟之后滚动文件,当日志记录器比较多时可以错峰滚动,用于降低服务器负载。

    Example

    trigger:
        kind: time
        interval: 1 day
        modulate: false
        max_random_delay: 0
    

Example

my_rolling_appender:
  kind: rolling_file
  path: "logs/test.log"
  policy:
    kind: compound
    trigger:
      kind: size
      limit: 1mb
    roller:
      kind: fixed_window
      base: 1
      count: 5
      pattern: "logs/test.{}.log"

再来一个完整版的自用的配置

refresh_rate: 30 seconds
appenders:
  stdout:
    kind: console
    encoder:
      kind: pattern
      pattern: "{d(%Y-%m-%dT%H:%M:%S)} [{f}:{L}] {h({l})} {m}{n}"
  file:
    kind: rolling_file
    path: $ENV{LOG_PATH}/app.log
    encoder:
      kind: pattern
      pattern: "{d(%Y-%m-%d %H:%M:%S)} {h({l})} {m}{n}"
    policy:
      kind: compound
      trigger:
        kind: size
        limit: 10mb
      roller:
        kind: fixed_window
        pattern: $ENV{LOG_PATH}/app-{}.gz
        base: 1
        count: 5

root:
  level: info
  appenders:
    - stdout
    - file