Rust 包 log4rs 的配置文件中文说明
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
,或者可以指定为json
,pattern
未指定时,默认为{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
的名称字段 必须 可选项 默认 含义 level false LevelFilter 与父级相同 日志等级 appenders false list[appenders] 记录器 additive false true/false true 父节点是否也将附加到此日志记录器 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
字段 | 必须 | 可选项 | 默认 | 含义 |
---|---|---|---|---|
target | false | stdout/stderr | stdout | 输出方式 |
tty_only | false | true/false | false | 日志消息只在输出目标是终端时才会被写入 |
encoder | false | Encoder | 输出格式 |
Example
my_console_appender: kind: console target: stdout tty_only: false
File
字段 | 必须 | 可选项 | 默认 | 含义 |
---|---|---|---|---|
path | true | 环境变量可使用$ENV{name_here} 格式 | 文件保存位置 | |
encoder | false | Encoder | 输出格式 | |
append | false | true/false | true | true: 文件后追加 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"
- pattern 用于重命名文件的模式。模式中必须包含双大括号 {},用于被替换为配置文件的索引数字,如果扩展名时
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