7个版本

0.3.0 2024年1月25日
0.2.3 2023年1月30日
0.2.2 2022年12月19日
0.2.1 2022年4月8日
0.1.1 2021年10月20日

213调试

Download history 3040/week @ 2024-04-20 2460/week @ 2024-04-27 1967/week @ 2024-05-04 3603/week @ 2024-05-11 2235/week @ 2024-05-18 2048/week @ 2024-05-25 1906/week @ 2024-06-01 1649/week @ 2024-06-08 1748/week @ 2024-06-15 2901/week @ 2024-06-22 1595/week @ 2024-06-29 2930/week @ 2024-07-06 3366/week @ 2024-07-13 2451/week @ 2024-07-20 3076/week @ 2024-07-27 3597/week @ 2024-08-03

13,012 每月下载量

Apache-2.0

19KB
191

日志-DTrace

Latest Version Documentation

slog 消息作为DTrace USDT探针转发。

概述

在生产应用程序中,日志记录非常有价值。然而,它也带来了一些困境。大多数时候,只有信息性或错误消息是有用的。但是当应用程序崩溃或行为异常时,检索更详细的日志信息可能非常有用。不幸的是,这通常只能通过重新启动进程并设置新的日志级别来实现。

此crate允许应用程序将 slog::Drain、Dtrace排程,附加到它们的日志记录器,并将所有消息转发到DTrace。这是通过一个 usdt 探针函数来完成的,不同的探针指示不同的日志级别。

请注意,Dtrace排程将 将消息发送到Dtrace,但在大多数情况下,用户已经将日志消息发送到某个位置(stdout、文件、syslog等)。可以使用 with_drain 构造函数生成一个Dtrace排程,该排程将消息转发到现有的排程以及Dtrace。

发出日志消息的Dtrace探针效率很高。特别是,当探针被禁用时,它所产生的成本不会超过层次结构中任何其他排程的成本。然而,当探针被启用时,无论日志级别如何,每个消息都可以在Dtrace中查看。

示例

$ cargo +nightly run --example simple

您可以在终端中看到只打印了警告消息。但是,在另一个shell中运行Dtrace命令应该会揭示更多消息。

# dtrace -Z -n 'slog*::: { printf("%s\n", copyinstr(arg0)); }' -q
{"ok": {"location":{"module":"simple","file":"examples/simple.rs","line":15},"level":"WARN","timestamp":"2021-10-19T17:55:55.260393409Z","message":"a warning message for everyone","kv":{"cool":true,"key":"value"}}}
{"ok": {"location":{"module":"simple","file":"examples/simple.rs","line":16},"level":"INFO","timestamp":"2021-10-19T17:55:55.260531762Z","message":"info is just for dtrace","kv":{"cool":true,"hello":"from dtrace","key":"value"}}}
{"ok": {"location":{"module":"simple","file":"examples/simple.rs","line":17},"level":"DEBUG","timestamp":"2021-10-19T17:55:55.260579423Z","message":"only dtrace gets debug messages","kv":{"cool":true,"hello":"from dtrace","key":"value"}}}

我们可以看到示例的stdout打印的警告消息,还可以看到信息和调试消息。每个日志级别都有特定的探针,允许用户针对特定级别的消息运行Dtrace操作。例如,此Dtrace命令仅接收通过 debug! 日志宏发出的消息。

# dtrace -Z -n 'slog*:::debug { printf("%s\n", copyinstr(arg0)); }' -q
{"ok": {"location":{"module":"simple","file":"examples/simple.rs","line":17},"level":"DEBUG","timestamp":"2021-10-19T17:57:30.578681933Z","message":"only dtrace gets debug messages","kv":{"cool":true,"hello":"from dtrace","key":"value"}}}

备注

此包从 usdt 包继承了夜班工具链的依赖。

依赖项

约7MB
约126K SLoC