#logging #slog #term #log #terminal-file

slog-term

Unix 终端输出汇流和格式化工具 for slog-rs

42 个版本 (稳定)

2.9.1 2024年2月18日
2.9.0 2022年2月21日
2.8.0 2021年2月10日
2.6.0 2020年5月29日
0.6.0 2016年7月19日

#132调试

Download history 83109/week @ 2024-04-20 79084/week @ 2024-04-27 75865/week @ 2024-05-04 81519/week @ 2024-05-11 84654/week @ 2024-05-18 75453/week @ 2024-05-25 82364/week @ 2024-06-01 77243/week @ 2024-06-08 80515/week @ 2024-06-15 77675/week @ 2024-06-22 66786/week @ 2024-06-29 78905/week @ 2024-07-06 84008/week @ 2024-07-13 82840/week @ 2024-07-20 85211/week @ 2024-07-27 85660/week @ 2024-08-03

每月353,051 次下载
用于 311 个crate (直接使用183个)

MPL-2.0 OR MIT OR Apache-2.0

51KB
1K SLoC

slog-rs logo
Travis CI Build Status slog-term on crates.io slog-rs Gitter Chat

slog-term - slog-rs 的终端输出汇流

有关更多信息、帮助、报告问题等,请参阅 slog-rs


lib.rs:

slog-rsDrain 用于终端输出

此crate实现了针对终端/控制台/shell或类似文本IO的输出格式化。

警告: slog-term(就像slog-rs本身一样)速度快、模块化且可扩展。它也有代价:许多细节(你现在可能不在乎,觉得它们很愚蠢,直到你真的需要,然后你会很高兴有人为你想到了它们)被考虑在内。无论如何,如果你只是想使用slog将日志输出到终端,请考虑使用像sloggers这样的包装crate。

注意:许多用户都因为以下事实而遭受打击:`slog::Logger::root(...)`需要一个在多线程中安全发送和共享的drain(Send+Sync)。对于终端或日志文件等共享资源,需要进行同步处理。如果你在`Sync`或`Send`周围遇到编译错误,说明你在处理它们时出了问题。

使用Decorator open trait,用户可以实施使用不同颜色、终端类型等的输出。

通过PlainSyncDecorator进行同步

此日志记录器通过在PlainSyncDecorator::PlainSyncDecorator中直接同步IO来工作。格式本身是线程安全的。

use slog::*;

let plain = slog_term::PlainSyncDecorator::new(std::io::stdout());
let logger = Logger::root(
    slog_term::FullFormat::new(plain)
    .build().fuse(), o!()
);

info!(logger, "Logging ready!");

通过slog_async进行同步

此drain通过slog_async::Async将日志放入单独的线程中:格式化和写入终端在一个专用线程中进行,因此不需要进一步同步。

use slog::{Drain, o, info};

let decorator = slog_term::TermDecorator::new().build();
let drain = slog_term::CompactFormat::new(decorator).build().fuse();
let drain = slog_async::Async::new(drain).build().fuse();

let log = slog::Logger::root(drain, o!());

info!(log, "Logging ready!");

通过Mutex进行同步

此drain通过将所有内容包裹在一个大的mutex中(是的,Mutex<Drain>实现了Drain trait)来进行同步。这有点慢,但在Ruby或Python等脚本语言中,几乎整个代码都在一个巨大的mutex中运行,没有人介意,所以我相信你会安然无恙。我个人有点难过,因为我花了很多精力为你提供工具,让你尽可能高效地编写代码,但你选择了这种方法。ಠ_ಠ 。但我在这里是为了服务,而不是告诉你该做什么。

use slog::{Drain, o, info};

let decorator = slog_term::TermDecorator::new().build();
let drain = slog_term::CompactFormat::new(decorator).build();
let drain = std::sync::Mutex::new(drain).fuse();

let log = slog::Logger::root(drain, o!());

info!(log, "Logging ready!");

依赖关系

~1–8.5MB
~66K SLoC