21 个版本
0.8.1 | 2024 年 7 月 3 日 |
---|---|
0.7.2 | 2024 年 4 月 21 日 |
0.6.1 | 2023 年 7 月 20 日 |
0.5.1 | 2023 年 3 月 9 日 |
0.4.0 | 2021 年 10 月 28 日 |
在 调试 中排名第 180
每月下载 64 次
13KB
155 代码行
tracing-layer-slack
tracing-layer-slack
为发送 Layer
实现了发送 tracing
事件到 Slack。
概述
SlackLayer
使用 tokio
和 reqwest
通过 POST 请求将每个新的跟踪事件发送到 Slack Webhook URL。text 字段的格式是静态定义的。
此层还会在每个事件的父 span
上查找可选的 JsonStorageLayer
extension
。此扩展可能包含事件父 span 的附加上下文信息,这些信息包含在 Slack 消息中。
安装
配置依赖关系并直接从 GitHub 拉取
[dependencies]
tokio = "1.0"
tracing = "0.1"
tracing-layer-slack = "0.6"
示例
查看 examples/ 中的完整示例列表。
简单示例
在这个简单示例中,使用环境中的 Slack 配置创建了一个层。在三个不同的 future 中创建了孤儿事件(没有父 span 的事件)和在 span 中发生的事件,并快速将许多消息发送到 Slack。
Slack 消息
此截图展示了在运行此示例时发送的前三条Slack消息。发送了更多消息,但这些消息已被这些图像截断。
Slack区块
默认情况下,消息使用Slack区块发送。以下是一个示例
Slack文本
通过禁用此crate的默认功能(因此禁用blocks
功能),您可以恢复到不使用区块套件的旧格式。
代码示例
使用以下命令在本地运行此示例
$ git clone https://github.com/seanpianka/tracing-layer-slack.git
$ cd tracing-layer-slack
$ cargo run --example simple
您必须将Slack配置导出到环境中。
来源
use regex::Regex;
use tracing::{info, warn, instrument};
use tracing_subscriber::{layer::SubscriberExt, Registry};
use tracing_layer_slack::{EventFilters, SlackLayer};
#[instrument]
pub async fn create_user(id: u64) -> u64 {
network_io(id).await;
info!(param = id, "A user was created");
id
}
#[instrument]
pub async fn network_io(id: u64) {
warn!(user_id = id, "some network io happened");
}
pub async fn controller() {
info!("Orphan event without a parent span");
let (id1, id2, id3) = tokio::join!(create_user(2), create_user(4), create_user(6));
}
#[tokio::main]
async fn main() {
// Only show events from where this example code is the target.
let target_to_filter: EventFilters = Regex::new("simple").unwrap().into();
// Initialize the layer and an async background task for sending our Slack messages.
let (slack_layer, background_worker) = SlackLayer::builder("my-app-name".to_string(), target_to_filter).build();
// Initialize the global default subscriber for tracing events.
let subscriber = Registry::default().with(slack_layer);
tracing::subscriber::set_global_default(subscriber).unwrap();
// It must be explicitly started before any messages will be handled.
background_worker.start().await;
// Perform our application code that needs tracing and Slack messages.
controller().await;
// Waits for all Slack messages to be sent before exiting.
background_worker.shutdown().await;
}
依赖项
~13–29MB
~457K SLoC