Log4rs 日志

log4rs 是一个高效的日志库框架,借鉴了Java的Logback和log4j。提供了输出到文件和控制台两种方式。

log4rs支持两种配置方式,基于编程方式配置和基于YAML文件配置。 建议使用YAML文件配置,这有效减少重新编译次数。

示例

添加依赖

cargo add log4rs

创建配置文件

mkdir -p config
touch config/log4rs.yaml

代码

config/log4rs.yaml

refresh_rate: 30 seconds
appenders:
  stdout:
    kind: console
  requests:
    kind: file
    path: "log/requests.log"
    encoder:
      pattern: "{d} - {m}{n}"
root:
  level: warn
  appenders:
    - stdout
loggers:
  app::backend::db:
    level: info
  app::requests:
    level: info
    appenders:
      - requests
    additive: false

main.rs

use log::{debug, error, info, trace, warn};
use log4rs;

fn main() {
    log4rs::init_file("config/log4rs.yaml", Default::default()).unwrap();

    error!("booting up");
    warn!("booting up");
    info!("booting up");
    debug!("booting up");
    trace!("booting up");
}

配置示例

refresh_rate: 10 seconds
appenders:
  stdout:
    kind: console
    encoder:
      kind: pattern
      pattern: "{d(%F %T.%6f)} {h({l})} {f}:{L} {m}{n}"
    target: stdout
    tty_only: false
  app_file:
    kind: file
    encoder:
      kind: pattern
      pattern: "{d(%F %T.%6f)} {h({l})} {f}:{L} {m}{n}"
    path: $ENV{PWD}/log/app.log
    append: true
  app_rolling_file_size:
    kind: rolling_file
    encoder:
      kind: pattern
      pattern: "{d(%F %T.%6f)} {h({l})} {f}:{L} {m}{n}"
    path: "$ENV{PWD}/log/app_rolling_size.log"
    policy:
      kind: compound
      trigger:
        kind: size
        limit: 1mb
      roller:
        kind: fixed_window
        base: 1
        count: 5
        pattern: "$ENV{PWD}/log/app_rolling_size.{}.log"
  app_rolling_file_time:
    kind: rolling_file
    path: "$ENV{PWD}/log/app_rolling_time.log"
    policy:
      kind: compound
      trigger:
        kind: time
        interval: 1 day
        modulate: true
        max_random_delay: 0
      roller:
        kind: fixed_window
        base: 1
        count: 5
        pattern: "$ENV{PWD}/log/app_rolling_time.{}.log"
root:
  level: trace
  appenders:
    - stdout
    - app_file
    - app_rolling_file_size
    - app_rolling_file_time
loggers:
  app::http:
    level: info
    appenders:
      - stdout
    additive: false