inklog 0.3.0-rc.4

Enterprise-grade Rust logging infrastructure
docs.rs failed to build inklog-0.3.0-rc.4
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: inklog-0.2.0

CI Status Version Docs.rs Downloads License Rust Coverage

中文 | English

企业级 Rust 日志基础设施

✨ 功能特性🚀 快速开始📚 文档💻 示例🤝 参与贡献


⚡ 结构化日志,安全内建

一条日志从采集、脱敏、加密到多端落盘,全链路可控:


📋 目录


✨ 功能特性

inklog 是面向生产环境的日志基础设施:应用代码继续使用 log / tracing 标准宏,由 inklog 接管订阅、脱敏、分发与落盘。下表为主要能力,全部与仓库代码和 docs/ 文档对应。

能力 说明
异步管线 Crossbeam 有界通道 + 专用工作线程池,发送端非阻塞、队列满时背压
📁 文件输出 按大小与时间轮转、BufWriter 缓冲、可选压缩与加密
🗄️ 数据库输出 批量落库、连接池、分区表支持,经 dbnexus 适配四种后端
🎭 数据脱敏 敏感字段名检测 + 正则规则库,fast-masking 加速多模式匹配
🎨 模板格式化 {timestamp} {level} {message} {trace_id} 等占位符模板
🧩 依赖注入 Cache / Config / Database trait 抽象,适配器可替换、可 Mock
能力 说明
🔁 可靠性 断路器、DB → File → Console 三级降级、健康检查线程自动恢复
🔀 动态 Sink LoggerBuilder::add_sink 注册第三方 Sink,每 Sink 独立通道;中间件链、采样器、令牌桶限流装饰器
🌡️ 运行时热调 set_leveltracing_subscriber::reload 即时调整全局与 per-target 级别
🔍 日志检索 inklog-cli query 按时间、级别、关键词检索本地日志(自动解密解包)
🌐 i18n 错误消息经 Fluent + ICU 按系统 locale 渲染(zh-CN / en)
📈 可观测性 健康状态、通道水位、连接池与写延迟直方图的 Prometheus 导出
  • Sink 家族src/support/io/sink/):consolefile(轮转/压缩/加密)、database(批量/分区/断路器)、ring_buffered_file(通道缓冲高吞吐)、net(TCP 可 TLS + UDP)、otlpmiddlewaresamplingrate_limit
  • 处理层src/support/processing/):template 模板引擎、masking 脱敏引擎与规则注册表、object_pool LogRecord/字符串对象池
  • 可观测性src/support/observability/):MetricsHealthStatusSinkHealthMonitor、回退状态
  • 校验src/validation/):PathValidator 路径穿越防护、LogSanitizer 日志内容净化
  • 归档防篡改src/support/audit_chain.rs):归档 HMAC-SHA256 链,防删除、重排与伪造
  • 集成适配src/integrations/):OxCacheAdapterInklogConfigAdapterDbNexusAdapter、trait-kit InklogModule、dbnexus 审计桥、confers 配置与 watch
  • CLIsrc/cli/):decryptgeneratevalidatequery 四个子命令

🚀 快速开始

环境要求

要求 版本
Rust 1.97.1+(仓库经 rust-toolchain.toml 固定)
edition 2024
平台 Linux / macOS / Windows

安装

cargo add inklog

或在 Cargo.toml 中显式声明(default = [],默认仅启用核心能力):

[dependencies]
inklog = "0.3.0-rc.3"

最小可运行示例

出自 examples/src/bin/core/basic.rs

use inklog::LoggerManager;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 默认配置初始化并安装全局 subscriber(Console Sink,级别 info)
    let logger = LoggerManager::new().await?;

    tracing::info!("Hello, inklog!");
    tracing::info!(user_id = 42, action = "login", "结构化字段示例");

    // 退出前排空通道并关闭全部 Sink
    logger.shutdown()?;
    std::mem::forget(logger); // 已显式关闭,阻止 Drop 重复关闭
    Ok(())
}

核心概念

  1. 初始化LoggerManager 负责安装全局 tracing subscriber 与 log crate 前端,进程内单例语义(init_inklog_logger() 提供便捷入口)。
  2. 记录:业务代码使用 tracing::info! 等标准宏,无侵入。
  3. Sink:输出目标抽象(LogSink / AsyncSink trait),console / file / database / net / otlp 内置实现,可自定义。
  4. 配置InklogConfig 支持 TOML 文件与 INKLOG_* 环境变量覆盖,优先级为环境变量 > 配置文件 > 默认值。
  5. 关闭:应用退出前调用 shutdown(),等待通道中剩余日志全部写入。

🎨 特性标志

default = []:默认组合只包含核心能力,下列 feature 全部按需显式启用(依据 Cargo.toml [features] 定义)。

标志 默认 说明
sqlite SQLite 数据库后端(经 dbnexus,rustls 运行时)
postgres PostgreSQL 数据库后端(经 dbnexus)
mysql MySQL 数据库后端(经 dbnexus)
duckdb DuckDB 数据库后端(经 dbnexus)
http Axum HTTP 健康与指标端点(axum + axum-server,TLS 走 rustls)
cli inklog-cli 命令行工具(clap + glob)
kit trait-kit 生命周期与可观测集成(InklogModule),需至少一个数据库后端 feature
compression Zstd 压缩轮转日志文件(zstd)
gzip Gzip 压缩后端(flate2 纯 Rust;未启用 compression 时 FileSink 轮转回退 gzip)
parquet Parquet/Arrow 导出(数据库 Sink 归档)
fast-masking Aho-Corasick 多模式脱敏加速
dbnexus-audit dbnexus AuditStorage 端口适配器,审计事件经 inklog DB sink 落库,可与任一后端组合
config-confers 配置经 confers 加载 + watch 热更新级别与轮转参数
kms KMS 密钥提供者(EnvKeyProvider / ConfersKeyProvider / Vault transit MVP)
net-sink 网络转发 Sink(TCP 可 TLS + UDP,断线缓冲与自动重连)
otlp OTLP/HTTP JSON 日志导出 MVP(手写传输,零新增依赖)
test-utils 测试面 mock 导出(MockCache / MockConfig / MockDatabaseAdapter),不入 default 与任何生产组合

⚠️ 数据库后端互斥sqlite / postgres / mysql / duckdb 互斥(经 dbnexus 强制,embedded 与 server-side 驱动不得混用),不适用 --all-features,请按后端分组启用。


📚 文档

文档 说明
📖 用户指南 从安装、配置详解到高级主题的完整教程
📘 API 参考 核心类型、配置结构体、错误类型与 trait 的逐项说明
🏗️ 架构文档 分层设计、依赖注入架构、数据流与并发模型
📊 性能基线 criterion 基准环境、方法与正式基线数字
🧪 测试场景 测试金字塔、E2E 场景定义与组合矩阵
🔒 安全文档 安全设计、漏洞报告流程与合规性说明
📋 更新日志 按 Keep a Changelog 格式维护的版本记录
🤝 贡献指南 开发环境、TDD 流程与代码风格约定
📦 在线 API 文档 docs.rs 自动生成的最新文档

💻 示例

examples/ 是 workspace 内的独立 crate(inklog-examples),按目录分为 7 类共 39 个示例。在仓库根目录运行:

cargo run --package inklog-examples --example <名称>

配置(config)

示例 说明 特性要求
config_file 配置文件加载(Layer 1 本地资源)
config_inspect 配置检查:sinks_enabled()LoggerManager::load()
env_overrides 环境变量覆盖配置加载

核心(core)

示例 说明 特性要求
basic 基础用法:初始化、级别、结构化字段、健康检查、优雅关闭
builder Builder 模式配置
all_features 完整功能演示
production 生产环境配置
template 日志模板
error_handling 错误处理(Layer 0 零依赖)
i18n 国际化格式化

Sink 与输出(sinks)

示例 说明 特性要求
console Console Sink
file File Sink
rotation 日志轮转(Layer 1 本地资源)
ring_buffered_file ChannelBufferedFileSink(Layer 1 本地资源)
archive_format 归档格式(Layer 0 零依赖)
compression Zstd 压缩与解压缩 compression
parquet_archive Parquet 归档 parquet + 任一数据库后端
partition_strategy 数据库分区策略

数据库(database)

示例 说明 特性要求
database Database Sink(SQLite 内存库) 任一数据库后端(示例文档用 sqlite
database_pg_mysql PostgreSQL/MySQL 数据库驱动演示
di_example 依赖注入模式 sqlite(经 required-features 强制)

基础设施(infra)

示例 说明 特性要求
channel_strategy 自适应 Channel 策略
circuit_breaker 断路器(Layer 2 外部服务)
fallback Sink 降级机制
log_adapter log crate 适配桥(Layer 0 零依赖)
log_level LogLevel 解析、比较与 Display
metrics 健康监控与指标收集(Layer 2 外部服务)
object_pool 对象池(Layer 0 零依赖)
output_format 输出格式(Layer 0 零依赖)
performance 性能演示
rate_limiter 速率限制器(Layer 0 零依赖)
runtime_ops LoggerManager 运行时操作 API

网络(network)

示例 说明 特性要求
http HTTP 健康检查与指标端点演示
http_auth HTTP 认证与 IP 白名单配置
tls_config TLS 配置

安全(security)

示例 说明 特性要求
encryption 日志加密
log_sanitizer 日志内容净化(Layer 0 零依赖)
masking 数据脱敏
path_validator 路径验证器(Layer 0 零依赖)

📂 浏览全部示例 →


🏗️ 架构

inklog 采用分层异步架构:domain(管理器、Subscriber 与工作线程)经 support::processing 完成模板渲染与脱敏后进入 Crossbeam 有界通道,由专用线程分发给 support::io::sink 各 Sink;integrations 以 trait 适配 oxcache / confers / dbnexus / trait-kit,support::observabilityhttp feature 暴露健康与指标端点。分层架构图、分层职责表与模块树对照见 docs/ARCHITECTURE.md「分层架构」。

🔀 核心执行链路

一条日志从 tracing 标准宏记录、脱敏、非阻塞进入有界通道(满时背压)到文件 / 数据库 Sink 落盘并回写指标的完整时序图,以及关键要点(默认通道容量 10000、3 个工作线程,可经 PerformanceConfig 调整;加密、压缩与轮转按轮转文件触发,不占用单条记录写入热路径),见 docs/ARCHITECTURE.md「核心执行链路」。

🧯 故障降级与自愈

Sink 写入失败经断路器(默认失败阈值 5 次、冷却 30 秒)重试或触发 DB → File → Console 三级降级,健康检查线程每 10 秒巡检并自动重建不健康 Sink、重置断路器。完整流程图见 docs/ARCHITECTURE.md「故障降级与自愈」。


🧪 测试

测试策略

类型 位置 说明
单元测试 src/ 内联 #[cfg(test)] 各模块边界与异常场景,Mock 经 cfg(test) 直接可见
集成测试 tests/integration/tests/cli_integration.rs 覆盖批量写入、HTTP、CLI、压缩比、Parquet、自动恢复等,需 sqlite,http,cli,compression,parquet,test-utils 组合
组合测试 tests/combinations/ feature 组合矩阵与多 Sink 降级,需 sqlite
端到端测试 tests/e2e/e2e_advanced.rs 226 个场景、15 个场景域(见 docs/TEST_SCENARIOS.md
Docker 数据库集成 tests/docker/ + docker/docker-compose.test.yml PostgreSQL / MySQL / SQLite 生命周期验证
性能测试 tests/performance/ + benches/ 大容量、长时间运行测试与 criterion 基准

测试规模(截至 v0.3.0-rc.3,按 #[test] / #[tokio::test] 统计):src/ 内联 1,255 个 + tests/ 目录 528 个,共 1,783 个测试函数;另有 criterion 基准函数 18 个(benches/inklog_bench.rs 15 个、benches/rc4_pipeline_bench.rs 3 个)。

运行命令(与 CI 一致)

# CI 测试门禁(数据库后端互斥,不适用 --all-features)
cargo test --workspace --features "sqlite http cli kit compression gzip parquet fast-masking test-utils"

# Docker 数据库集成测试
docker compose -f docker/docker-compose.test.yml up -d

# 覆盖率门禁(CI 要求 ≥80% 行覆盖)
cargo llvm-cov --features "sqlite http cli kit compression gzip parquet fast-masking" --lib --fail-under-lines 80

# 基准测试
cargo bench --bench rc4_pipeline_bench
cargo bench --bench inklog_bench

本地化提示:错误消息经 ICU/Fluent 按系统 locale 渲染。若测试断言英文消息文本,请设置 INKLOG_LOCALE=en(如 CI 或非英文系统环境)以固定输出语言。

代码质量门禁

cargo fmt --all -- --check                    # 格式检查
cargo clippy --all-targets --features "sqlite http cli kit compression gzip parquet fast-masking" -- -D warnings  # 零告警
cargo deny check                              # 依赖漏洞 / 许可证 / 重复依赖
cargo audit                                   # 安全公告(lefthook pre-push)

📊 性能

基线数字

首份正式基线(2026-09-11,criterion 中位数,覆盖写入 / 序列化 / 加密三条路径)的完整数字、环境口径与「复现」步骤见 docs/PERFORMANCE.md

设计要点

机制 参数 效果
有界通道背压 channel_capacity 默认 10000 防止内存溢出,通道水位经指标暴露
数据库批量写入 batch_size 默认 100,刷新间隔默认 500 ms docs/ARCHITECTURE.md 参考值:批量 100 条约 10,000 行/s,逐条插入约 100 行/s
脱敏按需开启 masking_enabled 正则脱敏是主链路中最贵的安全环节,建议仅在需要的 sink 开启
Zstd 压缩 级别 0-22,默认 3 默认级别压缩比约 3.5x

复现方式见 docs/PERFORMANCE.md「复现」章节。


🔒 安全

漏洞报告

发现安全漏洞请不要公开披露,按 docs/SECURITY.md 流程负责任上报:

安全设计

静态加密(AES-256-GCM)、密钥派生与内存清零、路径与内容防护、SQL 注入防护、HTTP 访问控制、归档防篡改链,以及对 GDPR / HIPAA / PCI-DSS 的合规映射,逐项说明见 docs/SECURITY.md「安全设计概览」。

供应链安全

仓库维护 deny.tomlcargo deny check(漏洞 / 许可证 / 重复依赖)、cargo audit(RustSec 公告)与 pre-commit 私钥扫描的运行位置与口径见 docs/SECURITY.md「安全设计概览」。


🗺️ 开发路线图

以下为既有发布安排整理的阶段性目标(节奏随工作区整体发布计划调整):

状态 目标 说明
📋 v0.3.0 正式发布 完成 0.3.0-rc.3 → 0.3.0 正式版
📋 工作区依赖传导同步 trait-kit 0.5.0、oxcache 0.5.0、dbnexus 0.6.0
📋 CI 测试矩阵按数据库后端分组 后端 feature 互斥,需按后端拆分验证组合
📋 补齐 MySQL 集成测试环境 当前缺少 MySQL 服务导致该后端集成测试阻塞
📋 提升测试覆盖率 llvm-cov 基线约 80%,向 95%+ 目标提升

🤝 参与贡献

欢迎贡献!完整流程见 docs/CONTRIBUTING.md

开发环境

要求 说明
Rust 1.97.1 rust-toolchain.toml 固定
protobuf 编译器 含数据库 feature 的组合构建需要 protoc
lefthook bash scripts/install-pre-commit.sh 安装钩子
git clone https://github.com/Kirky-X/inklog.git
cd inklog
bash scripts/install-pre-commit.sh

# 运行测试(与 CI 相同的 feature 组合)
cargo test --workspace --features "sqlite http cli kit compression gzip parquet fast-masking test-utils"

提交约定

  • Conventional Commitsfeat: ... / fix: ... / docs: ... 等,commit-msg 钩子强制校验;
  • pre-commit 钩子:rustfmt、clippy(-D warnings 零告警)、cargo deny check、私钥扫描;
  • pre-push 钩子cargo audit 与覆盖率 ≥80% 门禁。

Pull Request 流程

  1. Fork 仓库并创建功能分支(git checkout -b feature/your-feature);
  2. 进行修改,为公共 API 补充文档注释;
  3. 运行测试、clippy 与 cargo fmt --all,确保全部通过;
  4. 以 Conventional Commits 风格提交并推送;
  5. 打开 Pull Request 并通过 CI 全部质量门禁。

📋 更新日志

完整版本记录见 docs/CHANGELOG.md(Keep a Changelog 格式,语义化版本)。

最近版本

  • 0.3.0-rc.3(2026-09-10):新增 init_inklog_logger 单例初始化、运行时级别热调(set_level)、动态 Sink 注册(LoggerBuilder::add_sink)、trace_id/span_id 追踪关联、inklog-cli query 日志检索、网络转发 Sink(TCP/UDP)、OTLP 导出 MVP、归档防篡改链与 docs/PERFORMANCE.md 首份性能基线;
  • 0.3.0-rc.2(2026-09-03):集成 trait-kit 0.5.0-rc.2 与 i18n 重构并升级版本号;默认公共 API 移除三个 Mock(BREAKING,外部测试消费者需启用 test-utils);
  • 0.2.0(2026-08-05):新增 compression / parquet / fast-masking feature 与 i18n 核心模块;新增 ChannelBufferedFileSink、断路器保护与环形缓冲文件 Sink;edition 2024、MSRV 1.94。

📄 许可证

本项目基于 MIT License 发布,附加 Commons Clause 条件:未经单独授权,不得销售本软件。版权所有 (c) 2026 Kirky.X。


🙏 致谢

inklog 的实现依赖这些优秀的开源项目:

数据库、缓存、配置与生命周期集成分别由同工作区项目 dbnexus、oxcache、confers、trait-kit 提供。


📞 联系与支持


⭐ Star 历史

Star History Chart

💝 支持本项目

如果您觉得这个项目有用,请考虑给它一个 ⭐️!

由 ❤️ Inklog 团队构建

© 2026 Inklog Project. 版权所有。

⬆ 返回顶部