12 个版本
0.3.1 | 2024 年 7 月 3 日 |
---|---|
0.3.0 | 2024 年 7 月 3 日 |
0.2.2 | 2024 年 4 月 21 日 |
0.1.9 |
|
0.1.2 | 2023 年 6 月 19 日 |
在 #tracing-layer 中排名 28
每月 210 次下载
15KB
185 行
tracing-layer-discord
tracing-layer-discord
为发送 Layer
实现到 Discord 提供了 tracing
事件。
概述
DiscordLayer
通过 tokio
和 reqwest
发送 POST 请求到每个新的跟踪事件的 Discord Webhook URL。嵌入消息的格式是静态定义的。
此层还会在父 span
上查找可选的 JsonStorageLayer
extension
。此扩展可能包含事件父 span 的附加上下文信息,这些信息包含在 Discord 消息中。
安装
配置依赖关系并直接从 GitHub 拉取
[dependencies]
tokio = "1.0"
tracing = "0.1"
tracing-layer-discord = "0.1"
示例
请参阅 examples/ 中的完整示例列表。
简单示例
在这个简单的示例中,使用环境中的 Discord 配置创建了一个层。在三个不同的 future 中创建了一个孤儿事件(没有父 span 的事件)和一个在 span 中发生的事件,并快速向 Discord 发送了大量的消息。
Discord 消息
此截图显示了在运行此示例时发送的前三个 Discord 消息。还发送了更多消息,但已从这些图像中截断。
Discord 块
默认情况下,消息使用 Discord Blocks 发送。以下是一个示例
代码示例
使用以下命令在本地运行此示例
$ git clone https://github.com/seanpianka/tracing-layer-discord.git
$ cd tracing-layer-discord
$ cargo run --example simple
您必须将 Discord 配置导出到环境变量中。
来源
use regex::Regex;
use tracing::{info, warn, instrument};
use tracing_subscriber::{layer::SubscriberExt, Registry};
use tracing_layer_discord::{EventFilters, DiscordLayer};
#[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 Discord messages.
let (discord_layer, background_worker) = DiscordLayer::builder("my-app-name".to_string(), target_to_filter).build();
// Initialize the global default subscriber for tracing events.
let subscriber = Registry::default().with(discord_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 Discord messages.
controller().await;
// Waits for all Discord messages to be sent before exiting.
background_worker.shutdown().await;
}
依赖项
~11–31MB
~455K SLoC