Rust轻量级日志库r3bl_simple_logger的使用,高效简化的日志记录与管理工具

Rust轻量级日志库r3bl_simple_logger的使用

为什么选择R3BL?

R3BL TUI库及应用程序套件专注于开发人员的生产力。该项目正在构建具有丰富文本用户界面(TUI)的Rust命令行应用程序,将终端视为生产力工具,并为其构建各种优秀的应用程序。

介绍

使用r3bl_simple_logger进行日志记录的最简单方法是使用r3bl_rs_utils_core crate,而不是直接使用此crate。

  • 主要入口点是r3bl_rs_utils_core::try_to_set_log_level函数
  • 默认情况下,即使调用r3bl_rs_utils_core crate中file_logger模块的所有函数(log_debug, log_info, log_trace等),日志记录也是禁用的

如何自定义或更改日志实现

r3bl_simple_logger提供了一系列日志记录设施,可以轻松组合使用:

  • SimpleLogger - 基本的日志记录器,记录到stdout
  • TermLogger - 高级终端日志记录器,分割到stdout/err并支持颜色
  • WriteLogger - 记录到实现Write的结构,例如文件
  • CombinedLogger - 可用于组合多个日志记录器
  • TestLogger - 用于测试的专用日志记录器

完整示例代码

use r3bl_simple_logger::Logger;
use log::{info, warn, error};

fn main() {
    // 初始化简单的stdout日志记录器
    Logger::init(log::LevelFilter::Info).unwrap();
    
    // 记录不同级别的日志
    info!("This is an info message");
    warn!("This is a warning message");
    error!("This is an error message");
    
    // 组合多个日志记录器的示例
    let loggers = vec![
        r3bl_simple_logger::SimpleLogger::new(log::LevelFilter::Info),
        r3bl_simple_logger::WriteLogger::new(
            log::LevelFilter::Error,
            std::fs::File::create("error.log").unwrap()
        )
    ];
    
    r3bl_simple_logger::CombinedLogger::init(loggers).unwrap();
    
    // 现在日志会同时输出到stdout和error.log文件
    info!("This will only appear in stdout");
    error!("This will appear in both stdout and error.log");
}

扩展完整示例

use r3bl_simple_logger::{Logger, SimpleLogger, TermLogger, CombinedLogger};
use log::{debug, info, warn, error, trace};

fn main() {
    // 示例1: 使用SimpleLogger
    SimpleLogger::new(log::LevelFilter::Debug).init().unwrap();
    debug!("Debug message with SimpleLogger");
    
    // 示例2: 使用TermLogger(支持颜色)
    TermLogger::init(
        log::LevelFilter::Trace,
        Default::default(),
        TerminalMode::Mixed,
        ColorChoice::Auto
    ).unwrap();
    trace!("Trace message with TermLogger");
    
    // 示例3: 组合日志记录器
    let loggers = vec![
        SimpleLogger::new(log::LevelFilter::Warn),
        TermLogger::new(
            log::LevelFilter::Info,
            Default::default(),
            TerminalMode::Stdout,
            ColorChoice::Auto
        )
    ];
    
    CombinedLogger::init(loggers).unwrap();
    
    // 这些日志会同时输出到SimpleLogger和TermLogger
    warn!("Warning message - will appear in both loggers");
    info!("Info message - will only appear in TermLogger");
    
    // 示例4: 文件日志记录
    let file_logger = WriteLogger::new(
        log::LevelFilter::Error,
        Default::default(),
        std::fs::File::create("app.log").unwrap()
    );
    
    file_logger.init().unwrap();
    error!("This error will be written to app.log file");
}

许可证

Apache-2.0


1 回复

Rust轻量级日志库r3bl_simple_logger使用指南

简介

r3bl_simple_logger 是一个轻量级、简单易用的 Rust 日志库,提供了基本的日志记录功能,适合不需要复杂日志配置的小型项目。

主要特性

  • 轻量级实现
  • 简单的配置方式
  • 支持标准日志级别 (error, warn, info, debug, trace)
  • 线程安全的日志记录
  • 可定制的输出格式

使用方法

1. 添加依赖

Cargo.toml 中添加依赖:

[dependencies]
r3bl_simple_logger = "0.2"
log = "0.4"

2. 基本使用

use r3bl_simple_logger::SimpleLogger;
use log::{info, warn, error};

fn main() {
    // 初始化日志记录器
    SimpleLogger::new().init().unwrap();
    
    // 记录不同级别的日志
    info!("This is an info message");
    warn!("This is a warning message");
    error!("This is an error message");
}

3. 自定义日志级别

use r3bl_simple_logger::SimpleLogger;
use log::LevelFilter;

fn main() {
    // 只记录警告及以上级别的日志
    SimpleLogger::new()
        .with_level(LevelFilter::Warn)
        .init()
        .unwrap();
    
    log::info!("This won't be logged"); // 不会记录
    log::warn!("This will be logged");  // 会记录
}

4. 自定义输出格式

use r3bl_simple_logger::SimpleLogger;
use log::LevelFilter;

fn main() {
    // 自定义日志格式
    SimpleLogger::new()
        .with_level(LevelFilter::Info)
        .with_utc_timestamps() // 使用UTC时间
        .with_colors(true)     // 启用颜色输出
        .init()
        .unwrap();
    
    log::info!("Formatted log message with timestamp and colors");
}

5. 输出到文件

use r3bl_simple_logger::SimpleLogger;
use std::fs::File;

fn main() {
    // 将日志输出到文件
    let log_file = File::create("app.log").unwrap();
    
    SimpleLogger::new()
        .with_output(log_file)
        .init()
        .unwrap();
    
    log::info!("This will be written to app.log");
}

6. 多线程示例

use r3bl_simple_logger::SimpleLogger;
use log::info;
use std::thread;

fn main() {
    SimpleLogger::new().init().unwrap();
    
    let handles: Vec<_> = (0..5).map(|i| {
        thread::spawn(move || {
            info!("Thread {} logging a message", i);
        })
    }).collect();
    
    for handle in handles {
        handle.join().unwrap();
    }
}

完整示例

下面是一个结合了多种功能的完整示例:

use r3bl_simple_logger::SimpleLogger;
use log::{error, warn, info, debug, trace};
use log::LevelFilter;
use std::fs::File;
use std::thread;
use std::time::Duration;

fn main() {
    // 创建日志文件
    let log_file = File::create("application.log").unwrap();
    
    // 初始化日志记录器
    SimpleLogger::new()
        .with_level(LevelFilter::Debug)  // 设置日志级别为Debug
        .with_utc_timestamps()           // 使用UTC时间戳
        .with_colors(true)               // 启用颜色输出
        .with_output(log_file)           // 输出到文件
        .init()
        .unwrap();
    
    // 记录不同级别的日志
    error!("严重错误信息");
    warn!("警告信息");
    info!("常规信息");
    debug!("调试信息");
    trace!("跟踪信息");  // 不会记录,因为级别设置为Debug
    
    // 多线程日志记录示例
    let handles: Vec<_> = (0..3).map(|i| {
        thread::spawn(move || {
            for j in 0..3 {
                info!("线程 {} - 日志消息 {}", i, j);
                thread::sleep(Duration::from_millis(100));
            }
        })
    }).collect();
    
    for handle in handles {
        handle.join().unwrap();
    }
    
    info!("应用程序退出");
}

最佳实践

  1. 在应用程序启动时尽早初始化日志记录器
  2. 根据环境变量动态设置日志级别
  3. 生产环境中考虑将错误日志输出到文件
  4. 开发时可以使用颜色输出提高可读性

与其他日志库比较

r3bl_simple_logger 比 env_logger 更轻量,比 log4rs 更简单,适合不需要复杂配置的场景。如果你需要更强大的日志功能,可以考虑使用 tracing 或 slog 等更全面的日志解决方案。

总结

r3bl_simple_logger 提供了 Rust 日志系统的一个简单实现,对于小型应用或快速原型开发非常有用。它遵循 Rust 的标准日志接口,可以轻松集成到现有项目中。

回到顶部