1个不稳定版本
0.1.0 | 2024年1月18日 |
---|
#1091 in 编码
293 每月下载量
57KB
1K SLoC
Tarolog
tarolog 是一个灵活配置 tarantool 日志的库。允许您设置自己的日志格式或从内置格式中选择。支持“数据注入器”,用于用任何数据(例如实例-id或请求-id)丰富日志记录。所有格式都适用于 tarantool 内部日志。
内置格式
- JsonRaw - json日志。此格式与原始 tarantool 'json' 格式尽可能接近。
- Json - json日志,使用
serde
库生成日志记录。 - Plain - 纯文本。此格式与原始 tarantool 'plain' 格式尽可能接近。
此外,您还可以实现自己的格式。
基准测试
生成文件大小(每秒行数) 越大越好 |
生成的标准输出输出(每秒MB) 越大越好 |
|
---|---|---|
tarantool-json | 144135 | 49,675 |
tarolog-json | 203785 | 82 |
tarolog-json-serde | 188217 | 70,25 |
tarantool-plain | 210876 | 29,475 |
tarolog-plain | 231691 | 29,95 |
有关基准测试过程,请参阅“bench”包。
示例
在这个示例中,我们使用 json 格式,并使用注入器传播两个字段
- 键: "additional data",值: true
- 键: "request_id",值: {从 fiber 本地存储中提取的请求 id}
use tarolog;
use tarolog::Format;
use tarantool;
use tarantool::ffi;
use std::collections::HashMap;
use log::info;
fn main() {
tarolog::set_default_logger_format(Format::Json(Some(|| {
let mut additional_info =
HashMap::from([("additional data".to_string(), serde_json::Value::Bool(true))]);
// lua available only in tx thread, check it
let cord_is_main = unsafe { ffi::tarantool::cord_is_main() };
if cord_is_main {
let lua = tarantool::lua_state();
if let Ok(Some(rid)) = lua.eval("return require('fiber').self().storage['rid']") {
additional_info.insert("request_id".to_string(), serde_json::Value::String(rid));
}
}
additional_info
})));
info!("now new format is installed");
}
测试
tarantool-test 是必需的。
运行单元测试
cargo test
运行集成测试
cargo build; tarantool-test -p ./target/debug/libtests.so -- -i tests/test_init.lua
所有测试
make test
依赖关系
~12MB
~233K SLoC