1个不稳定版本
0.1.0 | 2021年1月1日 |
---|
#641 in Unix APIs
在tracing-systemd中使用
94KB
833 lines
sdJournal
sd-journal是libsystemd中systemd API的sd-journal包装器。sd-journal是systemd.rs项目的一部分。
gitlab.com | crates.io | docs.rs |
---|---|---|
sd-sys | ||
sd-id128 | ||
sd-journal |
systemd.rs是systemd-rust项目的替代品。
- systemd.rs在AGPL-3.0许可证下发布。如需个人/商业许可证,请提出请求。
- 仅关注sd-id128 & sd-journal的覆盖范围(目前没有计划扩展此覆盖范围)
- 良好的文档,包含对libsystemd文档的链接
- 在关注区域内100%覆盖libsystemd
- 良好的测试覆盖率
- 注重可用性
结构
libsystemd是用C语言开发的,围绕一个名为"journal"的单个结构体,没有区分函数是引用整个journal还是引用journal中的单个记录。
此库还为主结构体Journal
提供了所有包装函数。此外,还为Journal实现了两个迭代器:CursorIterator
和CursorReverseIterator
,它们都返回一个Result<Cursor, Error>
。Cursor上实现的所有方法都会调用Journal上实现的方法。因此,Cursor的文档总是引用Journal的文档。
libsystemd实现了某些额外的枚举。对于这些中的每一个,都实现了相应的迭代器。
状态 & 稳定性
此库仍在开发中。有一些方法被标记为具有“实验性”功能。这些方法尚未最终确定。每个方法的文档中都包含更多信息。此外,库结构目前正在调查中。目前,所有方法都是为结构体Journal实现的。这可能会很快改变:引用单个记录的方法可能被移动到结构体Cursor中,而执行光标移动(next()、previous()等)的方法将返回Cursor。
计划开发
- 进一步rust化
- 从Journal中删除Cursor方法
- CursorMovement返回Cursor而不是仅仅返回Done
- 附加特性实现
- 日志记录器实现
- 编码支持
编码
Journald以"字段名=字段值"的形式存储数据。虽然字段名是严格UTF-8编码的,字段值通常也是UTF-8编码的,但字段值也可以是任何编码,包括二进制数据。这个库允许以任何编码记录到日志中,尽管强烈建议只使用UTF-8。在从日志读取时,这个库将严格地遇到非UTF-8数据时引发错误。在未来版本中可能会添加解码支持以及有损解码。
示例
cargo.toml
[dependencies]
sdJournal = "0.1"
日志记录
use sd_journal::*;
Journal::log_message(Level::Info, "Hello World!").unwrap();
Journal::log_raw_record(&["MESSAGE=Hello World!",
&format!("PRIORITY={}", Level::Info),
&format!("CODE_FILE={}", file!()),
&format!("CODE_LINE={}", line!()),
"CUSTOM_FIELD=42"]).unwrap();
读取访问
use sd_journal::*;
use std::path::PathBuf;
// load local test data
let mut test_data = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
test_data.push("test-data/");
println!("looking for test data in folder {}", test_data.display());
let journal = Journal::open_directory(&test_data, PathFlags::FullPath, UserFlags::AllUsers).unwrap();
// loop over journal records
while let Ok(CursorMovement::Done) = journal.next() {
// do something on each cursor, e.g. print the MESSAGE
println!("{}", journal.get_data("MESSAGE").unwrap());
}
许可证
sd-journal: libsystemd的sd-journal包装器
版权(C)2020 克里斯蒂安·克莱乌 [[email protected]]
本程序是自由软件:您可以按照自由软件基金会发布的GNU Affero通用公共许可证的条款重新分发和/或修改它,许可证版本为3,或者(根据您的选择)许可证的任何后续版本。
本程序的分发是希望它会有用,但没有提供任何保证;甚至没有隐含的适销性或适用于特定目的的保证。有关详细信息,请参阅GNU Affero通用公共许可证。
您应该已收到GNU Affero通用公共许可证的副本。如果没有,请参阅https://gnu.ac.cn/licenses/。
可以根据要求授予个别许可证。
依赖关系
~62–390KB