rust库学习-env_logger

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

介绍

env_logger 配合 log 库使用,

log 是rust日志库的外观库,给日志库提供抽象的记录接口,

log使用宏,如info!() trace!()记录日志

假如需要替换当前使用的日志库,只需将初始化相关的代码和toml文件修改

env_logger 通过配置环境变量中 RUST_LOG 实现日志过滤

env_logger 库不合适要写入文件的日志,不能直接输出到文件和日志轮换(rotating),

默认输出到stderr, 可以切换 stdout,还有自定义输出 (Pipe(Box<dyn Write + Send + 'static>))

实践

Cargo.toml

[dependencies]
log = "0.4"
env_logger = "0.9"

main.rs

use std::env::set_var;
use log::{debug, error, log_enabled, info, Level};

fn main() {
    
    set_var("RUST_LOG", "debug");
    env_logger::init();
    //env_logger::builder().format_timestamp(None).init();
    debug!("this is a debug {}", "message");
    error!("this is printed by default");
    
    if log_enabled!(Level::Info) {
        let x = 3 * 4; // expensive computation
        info!("the answer was: {}", x);
    }
}

过滤规则

set_var 配置环境变量 RUST_LOG 的过滤规则

  1. 过滤日志等级(debug,error...)

    set_var("RUST_LOG", "debug");

  2. 过滤哪个文件的日志(工程名::模块::文件名=level),

        .\baseframe\
        |-- Cargo.lock
        |-- Cargo.toml
        |-- diesel.toml
        `-- src
            |-- main.rs
            `-- module
                |-- mod.rs
            `-- test.rs
    

    打印test文件输出的所有等级的日志

    set_var("RUST_LOG", "baseframe::module::test");

    打印全局 error 日志和 test 中 info 等级以上的日志

    set_var("RUST_LOG", "error,baseframe::module::test=info");

  3. 正则表达式过滤日志

    set_var("RUST_LOG", "/正则表达式");

    打印包含"include"的日志

    set_var("RUST_LOG", /include");

    过滤全局 error 日志和 test 中 info 等级以上的日志,打印包含include的日志

    set_var("RUST_LOG", "error,baseframe::module::test=info/include");

自定义输出格式

官方文档

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6