Skip to main content

Crate inklog

Crate inklog 

Source
Expand description

§inklog - 企业级 Rust 日志基础设施

inklog 是一个高性能、可扩展的日志库,专为生产环境设计。

§功能特性

  • 多输出目标: 支持 Console、File、Database 三种输出通道
  • 日志轮转: 支持按大小和按时间轮转
  • 压缩与加密: 支持 Zstandard 压缩和 AES-256-GCM 加密
  • 批量写入: 数据库批量写入,可配置批次大小和刷新间隔
  • 降级机制: DB → File → Console 三级降级
  • 健康监控: HTTP 端点暴露健康状态和 Prometheus 指标

§快速开始

§基础用法

use inklog::{LoggerManager, InklogConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 使用默认配置初始化
    let _logger = LoggerManager::new().await?;
     
    // 使用 tracing 宏记录日志
    tracing::info!("Hello, inklog!");
     
    Ok(())
}

§使用 Builder 模式配置

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    use inklog::LoggerManager;

    let _logger = LoggerManager::builder()
        .level("debug")
        .console(true)
        .file("logs/app.log")
        .enable_http_server(true)
        .http_port(9090)
        .build()
        .await?;

    Ok(())
}

§从配置文件加载

use inklog::LoggerManager;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 从指定文件加载
    let _logger = LoggerManager::from_file("config.toml").await?;
     
    // 或自动搜索配置文件
    // let _logger = LoggerManager::load().await?;
     
    Ok(())
}

§使用依赖注入模式

use std::sync::Arc;
use inklog::{LoggerManager, LoggerDependencies, InklogContainer};
use inklog::integrations::{OxCacheAdapter, InklogConfigAdapter};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 方式 1: 使用依赖注入容器
    let container = InklogContainer::new()?;
    let logger = container.create_logger().await?;
     
    // 方式 2: 使用 Builder 模式注入依赖
    let logger = LoggerManager::builder()
        .cache(Arc::new(OxCacheAdapter::new()?))
        .config(Arc::new(InklogConfigAdapter::new()?))
        .build().await?;
     
    // 方式 3: 使用 with_dependencies
    let deps = LoggerDependencies {
        cache: Some(Arc::new(OxCacheAdapter::new()?)),
        config: Some(Arc::new(InklogConfigAdapter::new()?)),
        ..Default::default()
    };
    let logger = LoggerManager::with_dependencies(deps).await?;
     
    Ok(())
}

§配置文件示例 (TOML)

[global]
level = "info"

[console_sink]
enabled = true

[file_sink]
enabled = true
path = "logs/app.log"
max_size = "100MB"
rotation = "daily"

[http_server]
enabled = true
host = "127.0.0.1"
port = 8080

Re-exports§

pub use domain::config;
pub use domain::types::log_record;
pub use support::io::sink;
pub use support::processing::template;
pub use support::io::sink::ZstdCompression;
pub use support::io::sink::compression::compress_data;
pub use support::io::sink::compression::compress_file;
pub use support::io::sink::compression::compress_string;
pub use support::io::sink::encryption::derive_key_from_password;
pub use support::io::sink::encryption::get_encryption_key;
pub use support::io::sink::ring_buffered_file::BackpressureStrategy;
pub use support::io::sink::ring_buffered_file::ChannelBufferedConfig;
pub use support::io::sink::ring_buffered_file::ChannelBufferedFileSink;
pub use support::io::sink::ring_buffered_file::ChannelBufferedMetrics;
pub use support::io::sink::CircuitBreaker;
pub use support::io::sink::CircuitBreakerConfig;
pub use support::io::sink::CircuitState;
pub use support::io::sink::CompositeRotation;
pub use support::io::sink::CompressionStrategy;
pub use support::io::sink::DiskCheckable;
pub use support::io::sink::FileSinkFactory;
pub use support::io::sink::GzipCompression;
pub use support::io::sink::LogSink;
pub use support::io::sink::NoCompression;
pub use support::io::sink::Rotatable;
pub use support::io::sink::RotationContext;
pub use support::io::sink::RotationResult;
pub use support::io::sink::RotationStrategy;
pub use support::io::sink::SinkFactory;
pub use support::io::sink::SinkMetadata;
pub use support::io::sink::SinkRegistry;
pub use support::io::sink::SizeBasedRotation;
pub use support::io::sink::TimeBasedRotation;
pub use support::processing::masking;
pub use domain::config::ArchiveFormat;
pub use domain::config::ChannelStrategy;
pub use domain::config::ConsoleSinkConfig;
pub use domain::config::DatabaseDriver;
pub use domain::config::DatabaseSinkConfig;
pub use domain::config::FileSinkConfig;
pub use domain::config::GlobalConfig;
pub use domain::config::HttpAuthConfig;
pub use domain::config::HttpErrorMode;
pub use domain::config::HttpServerConfig;
pub use domain::config::InklogConfig;
pub use domain::config::ParquetConfig;
pub use domain::config::PartitionStrategy;
pub use domain::config::PerformanceConfig;
pub use domain::config::TlsConfig;
pub use domain::types::log_record::LogRecord;
pub use integrations::DbNexusAdapter;
pub use integrations::InklogModule;
pub use integrations::Cache;
pub use integrations::Config;
pub use integrations::Database;
pub use integrations::InklogConfigAdapter;
pub use integrations::MockCache;
pub use integrations::MockConfig;
pub use integrations::MockDatabaseAdapter;
pub use integrations::OxCacheAdapter;
pub use integrations::OxCacheAdapterBuilder;
pub use integrations::InklogBuildObserver;
pub use integrations::create_inklog_scope;
pub use integrations::populate_inklog_scope;
pub use domain::core::InklogContainer;
pub use domain::core::InklogContainerBuilder;
pub use domain::core::LoggerBuilder;
pub use domain::core::LoggerDependencies;
pub use domain::core::LoggerManager;
pub use support::io::LogAdapter;
pub use support::io::LogLogger;
pub use support::observability::FallbackAction;
pub use support::observability::FallbackConfig;
pub use support::observability::FallbackState;
pub use support::observability::GaugeF64;
pub use support::observability::HealthStatus;
pub use support::observability::Metrics;
pub use support::observability::SinkHealth;
pub use support::observability::SinkHealthMonitor;
pub use support::observability::SinkStatus;
pub use support::processing::DataMasker;
pub use support::processing::DataMaskerBuilder;
pub use support::processing::LogTemplate;
pub use support::processing::MaskRule;
pub use support::processing::MaskRuleBuilder;
pub use support::processing::MaskRuleRegistry;
pub use support::processing::ObjectPool;
pub use support::processing::ObjectPoolConfig;
pub use support::processing::OutputFormat;
pub use support::processing::RateLimiter;
pub use support::processing::get_log_record;
pub use support::processing::get_string_buffer;
pub use support::processing::put_log_record;
pub use support::processing::put_string_buffer;
pub use chrono;
pub use serde;
pub use tokio;
pub use tracing;

Modules§

domain
Domain module - core business logic layer.
i18n
Internationalization and locale-aware formatting for log operations.
integrations
Integrations module - external service integrations.
support
Support layer module - functional support layer.

Structs§

LogSanitizer
Log sanitizer for preventing log injection.
PathValidator
Path validator for security checks.
PathValidatorConfig
Configuration for path validation.
SanitizerConfig
Configuration for log sanitization.
ValidationResult
Result of path validation.

Enums§

EscapeMode
Escape mode for log content sanitization.
InklogError
LogLevel
日志级别枚举
LogLevelParseError
解析日志级别字符串的错误

Type Aliases§

InklogResult
Convenience Result type alias using InklogError as the error type.