4个版本

0.1.1 2023年6月11日
0.1.0 2022年10月27日
0.0.5 2022年10月9日
0.0.4 2022年10月8日

330调试 中排名

Download history 13/week @ 2024-03-12 1/week @ 2024-03-26 12/week @ 2024-04-02 31/week @ 2024-04-09 8/week @ 2024-05-28

每月 783 次下载
vsmtp 中使用

GPL-3.0-or-later

93KB
1K SLoC

tracing-rfc-5424

简介

tracing-rfc-5424 是一个 tracing-subscriber 实现,它将 跟踪事件 发送到一个 syslog 守护进程

跟踪 是一个“作用域、结构化日志和诊断系统”。它提供了比日志记录代码包(如 fernlog4rs)提供的功能更多的功能,特别适合异步编程。特别值得注意的是,它非常明确地区分了事件的生成者及其消费者(在 跟踪 术语中称为 订阅者);如此之多,以至于 跟踪 包不提供 消费 事件的支持,除了定义 订阅者 特性。

《tracing-subscriber》库(也是Tokio项目的一部分)提供了一些基本实现,以及“实现和组合跟踪订阅者的实用工具”。该库引入的一个关键概念是Layer(层)。与实现收集跟踪数据的完整策略的跟踪订阅者不同,层提供特定行为的模块化实现。这里的关注点是,在一般情况下,跟踪事件数据的消费者可能希望同时对该数据执行各种操作:将其写入日志文件,直接写入stdout,将其发送到日志收集守护进程,基于它生成指标,等等。

这很容易导致类型数量的几何级数增长:如LogFileLogFileWithStdoutLogFileWithLogStashLogFileWithLogStashAndStdout等。层的想法是将事件处理的每个方面分解为其自己的类型,然后将它们“堆叠”在Subscriber中,以符合应用开发者的需求。在某种程度上,这种设计模式让人联想到Alexandrescu traits 类的概念,这是一种将功能分解为正交方面并以线性方式而非几何方式组合的方法。

tracing-rfc-5424是一个将事件(以及很快的跨度)发送到syslog守护进程的实现。RFC 3164(BSD syslog)和RFC 5424都受到支持。支持传输协议,包括数据报和流两种形式。

许可证

此库根据GPL 3.0发布。

先决条件

除了跟踪和syslog守护进程之外,无其他要求。tracing-rfc-5424是为rust 1.58.1开发的,尽管跟踪需要1.49。

安装

要将tracing-rfc-5424添加到您的crate,只需说cargo add tracing-rfc-5424,或将它直接添加到您的Cargo.toml

[dependencies]
tracing-rfc-5424 = "0.1.1"

用法

要通过UDP与本地syslog守护进程通信

use tracing::info;
use tracing_rfc_5424::{
    layer::Layer, rfc5424::Rfc5424, tracing::TrivialTracingFormatter, transport::UdpTransport,
};
use tracing_subscriber::{
    layer::SubscriberExt, // Needed to get `with()`
    registry::Registry,
};

// Setup the subsriber...
let subscriber = Registry::default()
    .with(Layer::<Layer::<tracing_subscriber::Registry, Rfc5424, TrivialTracingFormatter, UdpTransport>::try_default().unwrap());
// and install it.
let _guard = tracing::subscriber::set_default(subscriber);

info!("Hello, world!");
// Will produce a syslog line something like:
// Jun 23 16:10:55 my-host my-app[pid] Hello, world!

要通过本地Unix套接字与本地syslog守护进程通信

use tracing::info;
use tracing_rfc_5424::{rfc3164::Rfc3164, tracing::TrivialTracingFormatter, transport::UnixSocket};
use tracing_subscriber::{
    layer::SubscriberExt, // Needed to get `with()`
    registry::Registry,
};

  // Setup the subsriber...
let subscriber = subscriber
    .with(tracing_rfc_5424::layer::Layer::<Layer::<tracing_subscriber::Registry, Rfc3164, TrivialTracingFormatter, UnixSocket>::try_default().unwrap());
// and install it.
let _guard = tracing::subscriber::set_default(subscriber);

info!("Hello, world!");

状态、理由和路线图

这是一个初步发布;版本号(0.1.x)旨在传达这一点。有关路线图的更多信息,请参阅此crate的父工作空间

欢迎在[email protected]和在问题中提出错误、评论、问题、批评、PR、功能请求等。

依赖关系

~5-18MB
~194K SLoC