1个不稳定版本

0.1.0 2024年1月18日

#1091 in 编码

Download history 7/week @ 2024-04-08 1/week @ 2024-05-27 4/week @ 2024-06-03 6/week @ 2024-07-01 106/week @ 2024-07-15 181/week @ 2024-07-22

293 每月下载量

BSD-2-Clause

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