#tracing-layer #discord #tracing #layer #async #filter

tracing-layer-discord

将过滤后的跟踪事件发送到 Discord

12 个版本

0.3.1 2024 年 7 月 3 日
0.3.0 2024 年 7 月 3 日
0.2.2 2024 年 4 月 21 日
0.1.9 2024 年 4 月 15 日
0.1.2 2023 年 6 月 19 日

#tracing-layer 中排名 28

Download history 407/week @ 2024-04-10 220/week @ 2024-04-17 23/week @ 2024-04-24 1/week @ 2024-05-01 208/week @ 2024-07-03 1/week @ 2024-07-10 1/week @ 2024-07-24

每月 210 次下载

Apache-2.0

15KB
185

tracing-layer-discord

Docs Crates.io

tracing-layer-discord 为发送 Layer 实现到 Discord 提供了 tracing 事件。

概述

DiscordLayer 通过 tokioreqwest 发送 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 发送。以下是一个示例

Screenshot demonstrating the current formatter implementation for events sent as Discord messages

代码示例

使用以下命令在本地运行此示例

$ 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