You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在log4rs的YAML配置中指定JSON编码器替代Pattern编码器?

将log4rs日志输出从Pattern格式改为JSON格式(YAML配置)

1. 确保依赖包含JSON编码器特性

log4rs的JSON编码器属于可选特性,需要在Cargo.toml中显式启用:

log4rs = { version = "0.14.0", features = ["json"] }

(版本号可替换为你正在使用的log4rs版本)

2. 修改log4rs.yml配置文件

找到requests追加器的encoder配置块,将原有的pattern编码器替换为json编码器即可。

原Pattern编码器配置片段:

appenders:
  requests:
    kind: file
    path: "log/requests.log"
    encoder:
      kind: pattern
      pattern: "{d} [{t}] {l} {M}:{L} - {m}{n}"

修改后的JSON编码器配置:

appenders:
  requests:
    kind: file
    path: "log/requests.log"
    encoder:
      kind: json
      # 可选:自定义JSON输出字段,默认已包含level、message、timestamp、target等核心字段
      fields:
        timestamp: "{d(%Y-%m-%dT%H:%M:%S%.3fZ)}"
        level: "{l}"
        target: "{t}"
        module: "{M}"
        line: "{L}"
        message: "{m}"
  • 如果不需要自定义字段,仅保留kind: json即可,编码器会使用默认字段生成JSON日志。
  • 自定义字段支持使用log4rs的模式占位符,格式与Pattern编码器一致。

3. 初始化代码无需改动

你现有的初始化代码可以直接沿用:

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

完整配置示例

以下是包含控制台(Pattern格式)和请求日志(JSON格式)的完整YAML配置:

refresh_rate: 30 seconds
appenders:
  stdout:
    kind: console
    encoder:
      kind: pattern
      pattern: "{d} [{t}] {l} - {m}{n}"
  requests:
    kind: file
    path: "log/requests.log"
    encoder:
      kind: json
      fields:
        timestamp: "{d(%Y-%m-%dT%H:%M:%S%.3fZ)}"
        level: "{l}"
        target: "{t}"
        message: "{m}"
root:
  level: info
  appenders:
    - stdout
    - requests

内容的提问来源于stack exchange,提问作者DogEatDog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:15:36