docs.rs failed to build inklog-0.3.0-rc.1
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.
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
中文 | English
🎯 基于 Tokio 构建的高性能、安全、功能丰富的日志基础设施
Inklog 为企业级应用提供全面的日志解决方案:
| ⚡ 高性能 | 🔒 安全优先 | 🌐 多目标输出 | 📊 可观测性 |
|---|---|---|---|
| Tokio 异步 I/O | AES-256-GCM 加密 | 控制台、文件、数据库 | 健康监控 |
| 批量写入与压缩 | 密钥内存安全清除 | 自动轮转 | 指标与追踪 |
use ;
use PathBuf;
async
📋 目录
✨ 核心特性
| 🎯 核心功能 | ⚡ 企业功能 |
|---|---|
| 始终可用 | 可选特性 |
🎯 核心功能 (始终可用)
| 状态 | 功能 | 描述 |
|---|---|---|
| ✅ | 异步 I/O | 基于 Tokio 的非阻塞日志记录 |
| ✅ | 多目标输出 | 控制台、文件、数据库、自定义 Sink |
| ✅ | 结构化日志 | tracing 生态系统集成 |
| ✅ | 自定义格式 | 基于模板的日志格式 |
| ✅ | 文件轮转 | 基于大小和时间的轮转 |
| ✅ | 数据脱敏 | 基于正则的 PII 数据脱敏 |
| ✅ | 健康监控 | Sink 状态和指标追踪 |
| ✅ | 命令行工具 | decrypt、generate、validate 命令(需 cli feature) |
⚡ 企业功能
| 状态 | 功能 | 描述 |
|---|---|---|
| 🔍 | 压缩 | ZSTD、GZIP 支持 |
| 🔒 | 加密 | AES-256-GCM 文件加密 |
| 🗄️ | 数据库 Sink | PostgreSQL、MySQL、SQLite、DuckDB (dbnexus) |
| 📊 | Parquet 导出 | 分析就绪的日志格式 |
| 🌐 | HTTP 端点 | Axum 健康检查服务器 |
| 🔧 | 命令行工具 | 日志管理实用命令 |
📦 功能预设
| 预设 | 功能 | 适用场景 |
|---|---|---|
| minimal | 无可选特性 | 仅核心日志功能 |
| standard | http, cli |
标准开发环境 |
| full | 所有默认功能 | 生产环境日志 |
| test-utils | MockCache/MockConfig/MockDatabaseAdapter |
外部测试消费者:默认公共 API 已移除三个 mock(BREAKING),集成测试已全部真实化(DbNexusAdapter + sqlite),仅外部测试代码需显式启用本 feature |
🚀 快速开始
📦 安装
在 Cargo.toml 中添加依赖:
[]
= "0.2"
完整功能集(显式启用):
[]
= { = "0.2", = false, = ["http", "cli", "sqlite"] }
💡 基础使用
🎬 5 分钟快速开始
第一步:初始化日志系统
use LoggerManager;
async
第二步:记录日志消息
use LoggerManager;
async
第三步:文件日志
use ;
let config = InklogConfig ;
let _logger = with_config.await?;
第四步:数据库日志
use ;
let config = InklogConfig ;
let _logger = with_config.await?;
🔧 高级配置
加密文件日志
use ;
// 从环境变量设置加密密钥
set_var;
let config = InklogConfig ;
let _logger = with_config.await?;
自定义日志格式
use ;
let format_string = "[{timestamp}] [{level:>5}] {target} - {message} | {file}:{line}";
let config = InklogConfig ;
let _logger = with_config.await?;
🎨 功能标志
默认功能
= "0.2" # 默认不包含可选 feature (default = [])
可选功能
# HTTP 服务器
= { = "0.2", = [
"http", # Axum HTTP 健康端点
] }
# 命令行工具
= { = "0.2", = [
"cli", # decrypt, generate, validate 命令
] }
# 数据库 Sink (可选一个或多个)
= { = "0.2", = [
"sqlite", # SQLite 数据库 Sink
"postgres", # PostgreSQL 数据库 Sink
"mysql", # MySQL 数据库 Sink
] }
# 压缩与性能
= { = "0.2", = [
"compression", # ZSTD 压缩支持
"parquet", # Parquet 导出支持
"fast-masking", # Aho-Corasick 多模式加速脱敏
] }
功能详情
| 功能 | 依赖 | 描述 |
|---|---|---|
| http | axum | HTTP 健康检查端点 |
| cli | clap, glob, toml | 命令行工具 |
| sqlite | dbnexus, sea-orm | SQLite 数据库 Sink |
| postgres | dbnexus, sea-orm | PostgreSQL 数据库 Sink |
| mysql | dbnexus, sea-orm | MySQL 数据库 Sink |
| duckdb | dbnexus | DuckDB 数据库 Sink |
| compression | zstd | ZSTD 压缩支持(轮转日志文件) |
| parquet | parquet, arrow-array, arrow-schema | Parquet 导出支持(分析场景) |
| fast-masking | aho-corasick | Aho-Corasick 多模式加速脱敏 |
| kit | trait-kit, dbnexus, oxcache | trait-kit AsyncKit 集成 (InklogModule) |
📚 文档
📖 附加资源
| 资源 | 描述 |
|---|---|
| 📘 API 参考 | docs.rs 上的完整 API 文档 |
| 🏗️ 架构文档 | 系统架构和设计决策 |
| 🔒 安全文档 | 安全最佳实践和特性 |
| 📦 示例 | 所有功能的可运行示例 |
💻 示例
💡 真实示例
📝 基础日志
use LoggerManager;
async
📁 带轮转的文件日志
use ;
let config = InklogConfig ;
let _logger = with_config.await?;
🔒 加密日志
use ;
set_var;
let config = InklogConfig ;
let _logger = with_config.await?;
🗄️ 数据库日志
use ;
let config = InklogConfig ;
let _logger = with_config.await?;
🏥 HTTP 健康端点
use ;
use LoggerManager;
use Arc;
let logger = new;
let app = new.route;
// 启动 HTTP 服务器...
🎨 自定义格式
use ;
let format_string = "[{timestamp}] [{level:>5}] {target} - {message}";
let config = InklogConfig ;
let _logger = with_config.await?;
🔍 数据脱敏
use ;
let config = InklogConfig ;
let _logger = with_config.await?;
// 敏感数据将自动脱敏
info!;
// 输出: 用户邮箱: ***@***.***
📦 可运行示例
examples/ crate 提供了 10 个专用示例,演示特定功能。使用 cargo run --example <名称> 运行(在 examples/ 目录下或使用 --package inklog-examples)。
| 示例 | 描述 | 运行命令 |
|---|---|---|
object_pool |
对象池复用,优化高频分配路径 | cargo run --example object_pool |
path_validator |
路径校验,确保文件 Sink 目标安全 | cargo run --example path_validator |
log_sanitizer |
日志输入净化,防止日志注入攻击 | cargo run --example log_sanitizer |
log_adapter |
log 与 tracing 生态桥接适配器 |
cargo run --example log_adapter |
compression |
文件 Sink 压缩(ZSTD/GZIP) | cargo run --example compression |
rotation |
基于大小和时间的文件轮转 | cargo run --example rotation |
ring_buffered_file |
环形缓冲文件 Sink,适用于高吞吐场景 | cargo run --example ring_buffered_file |
config_file |
TOML 配置文件加载 | cargo run --example config_file |
metrics |
健康指标与 Prometheus 导出 | cargo run --example metrics |
circuit_breaker |
Sink 断路器与故障恢复 | cargo run --example circuit_breaker |
🏗️ 架构
🏗️ 系统架构
flowchart TD
App["应用层<br/>(使用 log! 宏的代码)"]
API["Inklog API 层<br/>- LoggerManager, LoggerBuilder<br/>- 配置管理<br/>- 健康监控"]
Sink["Sink 抽象层<br/>- ConsoleSink<br/>- FileSink (轮转、压缩)<br/>- DatabaseSink (批量写入)<br/>- AsyncFileSink<br/>- RingBufferedFileSink"]
Core["核心处理层<br/>- 日志格式化和模板<br/>- 数据脱敏 (PII)<br/>- 加密 (AES-256-GCM)<br/>- 压缩 (ZSTD, GZIP)"]
IO["并发与 I/O<br/>- Tokio 异步运行时<br/>- Crossbeam 通道<br/>- Rayon 并行处理"]
Store["存储与外部服务<br/>- 文件系统<br/>- 数据库 (PostgreSQL, MySQL, SQLite, DuckDB)<br/>- Parquet (分析)"]
App --> API --> Sink --> Core --> IO --> Store
分层说明
应用层
- 应用代码使用
logcrate 的标准log!宏 - 与现有 Rust 日志模式兼容
Inklog API 层
LoggerManager: 所有日志操作的主要协调器LoggerBuilder: 流式构建器模式配置- 健康状态跟踪和指标收集
Sink 抽象层
- 多种 Sink 实现对应不同的输出目标
- 开发环境的控制台输出
- 带轮转、压缩和加密的文件输出
- 批量写入的数据库输出 (PostgreSQL, MySQL, SQLite, DuckDB)
- 高吞吐量场景的异步和缓冲文件 Sink
核心处理层
- 基于模板的日志格式化
- 基于正则的 PII 数据脱敏 (邮箱、身份证、信用卡等)
- 敏感日志的 AES-256-GCM 加密
- 多种压缩算法 (ZSTD, GZIP)
并发与 I/O 层
- Tokio 异步运行时用于非阻塞 I/O
- Crossbeam 通道用于任务间通信
- Rayon 用于 CPU 密集型并行处理
存储与外部服务层
- 本地文件系统访问
- 通过 Sea-ORM 的数据库连接
- 分析工作流的 Parquet 格式
🔒 安全
🛡️ 安全特性
Inklog 以安全为首要优先级构建:
🔒 加密
- AES-256-GCM: 军用级日志文件加密
- 密钥管理: 基于环境变量的密钥注入
- 内存安全清除: 通过
zeroizecrate 安全清除密钥 - SHA-256 哈希: 加密日志的完整性验证
🎭 数据脱敏
- 基于正则的模式: 自动 PII 检测和脱敏
- 邮箱脱敏:
user@example.com→***@***.*** - 身份证脱敏: 信用卡和社会安全号脱敏
- 自定义模式: 可配置的正则表达式模式
🔐 密钥安全处理
// 从环境变量安全设置加密密钥
set_var;
// 密钥使用后自动清除
// 切勿在代码中硬编码密钥
🛡️ 安全最佳实践
- 无硬编码密钥: 密钥从环境变量加载
- 最小权限操作: 仅必要的文件/数据库访问
- 审计日志: 调试功能用于安全审计追踪
- 合规就绪: 支持 GDPR、HIPAA、PCI-DSS 日志要求
🧪 测试
🎯 运行测试
# ⚠️ 数据库后端 features(sqlite/postgres/mysql/duckdb)互斥(经 dbnexus 强制),
# 不适用 --all-features;请按后端分组运行:
# 在发布模式下运行测试
# 运行基准测试
本地化提示:错误消息经 ICU/Fluent 按系统 locale 渲染。若测试断言英文消息文本, 请设置
INKLOG_LOCALE=en(如 CI 或非英文系统环境)以固定输出语言。
测试覆盖率
Inklog 目标是 95%+ 代码覆盖率:
# 生成覆盖率报告
代码检查和格式化
# 格式化代码
# 检查格式而不修改
# 运行 Clippy (警告视为错误)
安全审计
# 运行 cargo deny 安全检查
# 检查安全公告
# 检查禁止的许可证
依赖注入测试
Inklog 提供 Mock 实现,支持无外部依赖的单元测试:
use ;
use ;
use Arc;
async
Mock 实现特性:
- MockCache: 内存 HashMap,支持延迟模拟
- MockConfig: 运行时可修改的配置
- MockDatabaseAdapter: 内存日志存储,支持健康状态控制
详细使用方法请参考 用户指南。
集成测试
# 运行集成测试
# 使用 Docker 服务运行 (PostgreSQL, MySQL)
🤝 贡献
欢迎贡献!请查看 CONTRIBUTING.md 了解指南。
开发环境设置
# 克隆仓库
# 安装 pre-commit 钩子 (如果可用)
# 运行测试
# 运行 linter
# 格式化代码
Pull Request 流程
- Fork 仓库
- 创建功能分支 (
git checkout -b feature/amazing-feature) - 进行修改
- 运行测试确保全部通过 (
cargo test --all-features) - 运行 clippy 并修复警告 (
cargo clippy --all-features) - 提交修改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打开 Pull Request
代码风格
- 遵循 Rust 命名约定 (变量 snake_case,类型 PascalCase)
- 使用
thiserror定义错误类型 - 使用
anyhow提供错误上下文 - 为所有公共 API 添加文档注释
- 提交前运行
cargo fmt
📄 许可证
本项目采用 MIT 许可证:
🙏 致谢
🌟 建立在优秀工具之上
Inklog 的实现离不开这些优秀的项目:
- tracing - Rust 结构化日志基础
- tokio - Rust 异步运行时
- Sea-ORM - 异步 ORM
- axum - HTTP 端点 Web 框架
- serde - 序列化框架
- 整个 Rust 生态系统的优秀工具和库
📞 支持
⭐ Star 历史
💝 支持本项目
如果您发现本项目有用,请考虑给一个 ⭐️!
由 ❤️ Inklog 团队构建
© 2026 Inklog Project. 版权所有。