rust输出日志文件
前言
log是Rust的logging facade,可以理解为面向对象语言中的接口,它由官方提供维护工作。提供了一套标准宏用来记录日志,级别从低到高依次为:trace! < debug! < info! < warn! < error!
。还提供了log!
和log_enabled!
宏,log!
需要手动指定日志等级;log_enabled!
用来判断是否启用了某个日志级别,如if log_enabled!(Debug)
时,做一些特定的处理。
上面提到log类似于接口,所以在使用的时候他不会有任何输出,我们需要给log引入具体的实现,像env_logger、log4rs等。由于env_logger不能输出到文件,本文将详细介绍log4rs的使用。
使用log4rs
log4rs是一个高度可配置的日志框架,模仿的Java的Logback和log4j库。
在Cargo.toml中加入依赖
[dependencies]
log = "0.4.17"
log4rs = "1.1.1"
main.rs
在main.rs中加入
use log::warn;
fn main() {
// 初始化
log4rs::init_file("log4rs.yaml", Default::default()).unwrap();
// 输出warn日志
warn!("测试日志");
println!("Hello, world!");
}
新建log4rs.yaml文件
加入如下内容:
# 检查配置文件变动的时间间隔
refresh_rate: 30 seconds
# appender 负责将日志收集到控制台或文件, 可配置多个
appenders:
stdout:
# 控制台输出
kind: console
encoder:
# 格式可配置,具体格式详见:
# https://docs.rs/log4rs/1.0.0/log4rs/encode/pattern/index.html
pattern: "{d} - {m}{n}"
file:
# 输出到文件
kind: file
path: logs/test.log
append: true
encoder:
pattern: "{d} - {m}{n}"
rolling_file:
# 输出到滚动文件
kind: rolling_file
# 日志路径
path: logs/test.log
# 追加模式, 即每次在已有文件末尾添加日志, 默认为 true
append: true
encoder:
pattern: "{d} - {m}{n}"
policy:
kind: compound
# 触发器
trigger:
kind: size
limit: 10 mb
# 分割策略
# roller:
# # 删除
# kind: delete
roller:
# 固定窗口
# 每次都往test.log中写入文件,test.log文件达到触发策略时,分割文件后移一位。
# 即触发时,创建test.1.log文件,原test.1.log文件变为test.2.log文件,依次顺延,但只保留设置的日志数量,多余的删除。
kind: fixed_window
# 分割文件名称
pattern: logs/test.{}.log
# 从1开始
base: 1
# 保留五个日志
count: 5
# 对全局 log 进行配置
root:
# 配置输出的日志级别
# trace < debug < info < warn < error
level: warn
# 配置输出appender
appenders:
- stdout
# rolling_file和file选一个即可
- rolling_file
# 对特定工程进行配置,可选
loggers:
app::backend::db:
level: info
app::requests:
level: info
appenders:
- stdout
# 不继承全局配置的appenders,不设置时会使用全局的appenders+自己的appenders
additive: false
本文作者:gaozejie
版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。