侧边栏壁纸
博主头像
喵记博主等级

行动起来,活在当下

  • 累计撰写 18 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Rust中env_logger库的使用

张秋平
2024-03-08 / 0 评论 / 0 点赞 / 107 阅读 / 2161 字

Rust中env_logger日志库的使用

介绍

env_logger通过配置环境变量中的RUST_LOG 变量来实现日志过滤,它是一个简单的日志库的实现。不能将日志输出到文件中

示例

最小化使用

use std::env::set_var;
use env_logger;

fn main() {
    // 设置全局日志过滤等级
    set_var("RUST_LOG", "info");
	// 初始化日志库,不可缺少
    env_logger::init();

    // 输出日志
    log::debug!("Hello, world!");	// 这一行不会被输出
    log::info!("Hello, world!");
    log::warn!("Hello, world!");
    log::error!("Hello, world!");
}

/* 输出: 
[2024-03-08T13:56:46Z INFO  test01] Hello, world!
[2024-03-08T13:56:46Z WARN  test01] Hello, world!
[2024-03-08T13:56:46Z ERROR test01] Hello, world!
*/

自定义日志输出格式

从env_logger 0.7版本开始,可以使用Builder 来自定义日志的输出格式,可以通过编程的方式设置一个闭包来定义如何格式化和输出日志记录

use std::env::set_var;
use std::io::Write;
use env_logger;
use log::LevelFilter;

fn main() {
    // 设置全局日志过滤等级
    set_var("RUST_LOG", "info");
    env_logger::Builder::new().format(
        |buf, record| {
            writeln!(buf,
                     "{} | {:5.8} | {}:{} - {}",
                     chrono::Local::now().format("%Y-%m-%d %H:%M:%S"),
                     record.level(),
                     record.file().unwrap_or("unknown"),
                     record.line().unwrap(),
                     record.args()
            )
        }
    ).filter(None, LevelFilter::Info).init();

    // 输出日志
    log::debug!("Hello, world!");
    log::info!("Hello, world!");
    log::warn!("Hello, world!");
    log::error!("Hello, world!");
}

/* 输出:
2024-03-08 22:14:36 | INFO  | src\main.rs:24 - Hello, world!
2024-03-08 22:14:36 | WARN  | src\main.rs:25 - Hello, world!
2024-03-08 22:14:36 | ERROR | src\main.rs:26 - Hello, world!
*/

需要注意的是,按照上述方式自定义输出格式后,原有的输出中的颜色信息将会丢失。

0

评论区