#logging-tracing #non-blocking #tracing #logging #non-blocking-writer #file-appender

tracing-appender-localtime

基于本地时间的tracing-appender

2个版本

0.2.4 2024年4月17日
0.2.3 2024年4月16日

174调试

每月下载量 31次

MIT 许可证

73KB
864

Tracing — Structured, application-level diagnostics

tracing-appender

用于记录日志事件和范围的写入器

Crates.io Documentation Documentation (master) MIT licensed Build Status Discord chat

文档 | 聊天

概述

tracing 是一个框架,用于为Rust程序添加诊断信息收集功能,这些信息是结构化的、基于事件的。 tracing-appender 允许事件和范围通过专用日志线程以非阻塞方式记录。它还提供了一个 RollingFileAppender,可以与或没有非阻塞写入器一起使用。

编译器支持:需要 rustc 1.63+

使用方法

将以下内容添加到您的 Cargo.toml

tracing-appender = "0.2"

此crate可以通过几种方式记录范围/事件

滚动文件写入器

fn main(){
    let file_appender = tracing_appender::rolling::hourly("/some/directory", "prefix.log");
}

这创建了一个每小时旋转的文件写入器,它将写入 /some/directory/prefix.log.YYYY-MM-DD-HH。其他可用选项为 Rotation::DAILYRotation::NEVER

该文件追加器实现了 std::io::Write。要与 tracing_subscriber::FmtSubscriber 一起使用,必须结合一个 MakeWriter 实现来记录跟踪跨度/事件。

关于如何使用此文件追加器的更多详细信息,请参阅 rolling 模块的文档。

非阻塞写入器

以下示例演示了如何使用 std::io::Writer 的实现构建一个 non_blocking 写入器。

use std::io::Error;

struct TestWriter;

impl std::io::Write for TestWriter {
    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
        let buf_len = buf.len();
    
        println!("{:?}", buf);
        Ok(buf_len)
    }

    fn flush(&mut self) -> std::io::Result<()> {
        Ok(())
    }
}

fn main() {
    let (non_blocking, _guard) = tracing_appender::non_blocking(TestWriter);
    tracing_subscriber::fmt().with_writer(non_blocking).init();
}

注意: _guard 是一个由 tracing_appender::non_blocking 返回的 WorkerGuard,以确保在进程突然终止的情况下,缓冲日志被刷新到输出。有关详细信息,请参阅 WorkerGuard 模块。

以下示例演示了如何使用一个 tracing_appender::non_blocking 写入器构建一个与 std::io::Write 的实例。

fn main() {
    let (non_blocking, _guard) = tracing_appender::non_blocking(std::io::stdout());
    tracing_subscriber::fmt()
        .with_writer(non_blocking)
        .init();
}

关于如何使用 non_blocking 的更多详细信息,请参阅 non_blocking 模块的文档。

非阻塞滚动文件追加器

fn main() {
    let file_appender = tracing_appender::rolling::hourly("/some/directory", "prefix.log");
    let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);
   tracing_subscriber::fmt()
       .with_writer(non_blocking)
       .init();
}

支持的 Rust 版本

tracing-appender 是基于最新稳定版构建的。最低支持的版本是 1.63。当前 tracing-appender 版本在低于最低支持版本的 Rust 版本上构建不能保证。

跟踪遵循与 Tokio 项目其他部分相同的编译器支持策略。当前稳定 Rust 编译器和它之前的三个最近的小版本将始终得到支持。例如,如果当前稳定编译器版本是 1.69,则最低支持版本不会超过 1.66,即三个小版本之前。只要这样做符合此策略,增加最低支持编译器版本不被视为 semver 破坏性更改。

许可证

本项目采用 MIT 许可证

贡献

除非您明确声明,否则您提交给 Tokio 的任何有意贡献,均应按 MIT 许可,不附加任何其他条款或条件。

依赖关系

~3–9MB
~72K SLoC