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 在 调试
每月353,051 次下载
用于 311 个crate (直接使用183个)
51KB
1K SLoC
slog-term - slog-rs 的终端输出汇流
有关更多信息、帮助、报告问题等,请参阅 slog-rs。
lib.rs
:
slog-rs
的 Drain
用于终端输出
此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