日志配置
启用每个模块的日志级别
创建两个模块:foo
和其嵌套的 foo::bar
,日志记录指令分别由 RUST_LOG
环境变量控制。
mod foo {
mod bar {
pub fn run() {
log::warn!("[bar] warn");
log::info!("[bar] info");
log::debug!("[bar] debug");
}
}
pub fn run() {
log::warn!("[foo] warn");
log::info!("[foo] info");
log::debug!("[foo] debug");
bar::run();
}
}
fn main() {
env_logger::init();
log::warn!("[root] warn");
log::info!("[root] info");
log::debug!("[root] debug");
foo::run();
}
RUST_LOG
环境变量控制 env_logger
的输出。模块声明采用逗号分隔各项,格式类似于 path::to::module=log_level
。按如下方式运行 test
应用程序:
RUST_LOG="warn,test::foo=info,test::foo::bar=debug" ./test
将日志等级 log::Level
的默认值设置为 warn
,将模块 foo
和其嵌套的模块 foo::bar
的日志等级设置为 info
和 debug
。
WARN:test: [root] warn
WARN:test::foo: [foo] warn
INFO:test::foo: [foo] info
WARN:test::foo::bar: [bar] warn
INFO:test::foo::bar: [bar] info
DEBUG:test::foo::bar: [bar] debug
用自定义环境变量设置日志记录
Builder
配置日志记录。
Builder::parse
以 RUST_LOG
语法的形式解析 MY_APP_LOG
环境变量的内容。然后,Builder::init
初始化记录器。所有这些步骤通常由 env_logger::init
在内部完成。
use std::env;
use env_logger::Builder;
fn main() {
Builder::new()
.parse(&env::var("MY_APP_LOG").unwrap_or_default())
.init();
log::info!("informational message");
log::warn!("warning message");
log::error!("this is an error {}", "message");
}
在日志信息中包含时间戳
使用 Builder
创建自定义记录器配置。每个日志项调用 Local::now
以获取本地时区中的当前 DateTime
,并使用 DateTime::format
和 strftime::specifiers
来格式化最终日志中使用的时间戳。
如下实例调用 Builder::format
设置一个闭包,该闭包用时间戳、Record::level
和正文(Record::args
)对每个信息文本进行格式化。
use std::io::Write;
use chrono::Local;
use env_logger::Builder;
use log::LevelFilter;
fn main() {
Builder::new()
.format(|buf, record| {
writeln!(buf,
"{} [{}] - {}",
Local::now().format("%Y-%m-%dT%H:%M:%S"),
record.level(),
record.args()
)
})
.filter(None, LevelFilter::Info)
.init();
log::warn!("warn");
log::info!("info");
log::debug!("debug");
}
stderr 输入将含有:
2017-05-22T21:57:06 [WARN] - warn
2017-05-22T21:57:06 [INFO] - info
将信息记录到自定义位置
log4rs 将日志输出配置到自定义位置。log4rs 可以使用外部 YAML 文件或生成器配置。
使用文件附加器 log4rs::append::file::FileAppender
创建日志配置,文件附加器定义日志记录的目标位置。日志配置使用 log4rs::encode::pattern
中的自定义模式进行编码,将配置项分配给 log4rs::config::Config
,并设置默认的日志等级 log::LevelFilter
。