7 个版本

0.2.3 2023年11月13日
0.2.2 2022年3月17日
0.2.1 2022年2月28日
0.2.0 2021年10月23日
0.1.0 2020年5月5日

#33 in 调试

Download history 199448/week @ 2024-04-26 198833/week @ 2024-05-03 200691/week @ 2024-05-10 194165/week @ 2024-05-17 191998/week @ 2024-05-24 194694/week @ 2024-05-31 181846/week @ 2024-06-07 189465/week @ 2024-06-14 195926/week @ 2024-06-21 188638/week @ 2024-06-28 185725/week @ 2024-07-05 178312/week @ 2024-07-12 192653/week @ 2024-07-19 186398/week @ 2024-07-26 198100/week @ 2024-08-02 202981/week @ 2024-08-09

813,701 每月下载量
用于 408 个crates (241 直接)

MIT 许可证

1MB
13K SLoC

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实现来记录跟踪跨度/事件。

滚动模块的文档提供了更多关于如何使用此文件追加器的详细信息。

非阻塞写入器

以下示例演示了使用std::io::Write实现的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();
}

注意: _guardWorkerGuard,由tracing_appender::non_blocking返回,以确保在进程突然终止的情况下,缓冲日志被刷新到输出。有关更多详细信息,请参阅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的详细信息。

非阻塞滚动文件追加器

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许可证许可,不附加任何额外条款或条件。

依赖关系

~1.4–6.5MB
~41K SLoC