Skip to content

ydzat/Logloom

Repository files navigation

Logloom

一个轻量级的、国际化友好的、可扩展的日志系统,具备多平台支持能力,可用于用户空间应用和Linux内核模块。

构建状态 版本 许可证

特性

  • C语言核心库:高效且轻量级
  • 多语言绑定:支持Python、C++(规划中)
  • 国际化支持:内置多语言支持,易于拓展新语言
  • 日志分级:标准的DEBUG、INFO、WARN、ERROR和FATAL级别
  • 多目标输出:同时输出到控制台、文件,易于扩展新输出目标
  • 自动日志轮转:基于大小的日志文件轮转
  • 可配置格式:可自定义日志格式和时间戳格式
  • 上下文追踪:支持模块/组件级别的上下文标记
  • Linux内核支持:可作为内核模块使用
  • 线程安全:所有操作都是线程安全的
  • 插件系统:支持动态加载自定义插件(过滤器、处理器等)
  • 配置灵活:支持文件配置和编程API配置

系统要求

环境要求

  • 操作系统:Linux(推荐 Fedora 41 或 Ubuntu 22.04+)
  • 编译器:GCC 5.0+ 或 Clang 5.0+
  • 构建工具:Make
  • Python:3.12.11+ (推荐使用 uv 进行环境管理)
  • 包管理器:uv(推荐)或 pip

依赖包

在 Fedora 上安装依赖包:

sudo dnf install make gcc libyaml-devel pkgconfig python3-devel

在 Ubuntu/Debian 上安装依赖包:

sudo apt-get update
sudo apt-get install build-essential libyaml-dev pkg-config python3-dev

Python环境管理(推荐使用uv)

  1. 安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
  1. 克隆项目并设置环境:
git clone https://github.com/yourusername/logloom.git
cd logloom
uv sync  # 自动创建虚拟环境并安装依赖
  1. 运行Python测试:
uv run pytest tests/python/ -v

传统pip方式(如果不使用uv)

python3 -m venv .venv
source .venv/bin/activate
pip install -e .

快速开始

在C语言中使用

#include "log.h"
#include "lang.h"
#include "config.h"

int main() {
    // 初始化配置
    logloom_config_init("config.yaml");
    
    // 设置语言(可选,默认使用配置文件中的设置)
    logloom_set_language("zh");
    
    // 记录不同级别的日志
    LOG_INFO("main", "应用程序已启动");
    LOG_DEBUG("main", "调试信息: %s", "some details");
    LOG_WARN("main", "警告: 资源使用率高");
    LOG_ERROR("main", "发生错误: %d", errno);
    
    // 使用国际化文本
    const char* welcome = logloom_get_text("app.welcome");
    printf("%s\n", welcome);
    
    // 清理资源
    logloom_cleanup();
    return 0;
}

在Python中使用

安装并使用Python绑定:

# 使用uv(推荐)
uv run python -c "import logloom; print('Logloom ready!')"

# 或使用传统方式
pip install -e .
python -c "import logloom; print('Logloom ready!')"

Python代码示例:

import logloom_py as ll

# 初始化配置
ll.initialize("config.yaml")

# 创建记录器
logger = ll.Logger("example")

# 记录不同级别的日志
logger.info("应用程序已启动")
logger.debug("调试信息: {}", "一些详细信息") 
logger.warn("警告: 资源使用率高: {}%", 85)
logger.error("发生错误: {}", "连接中断")

# 使用国际化文本
welcome = ll.get_text("app.welcome")
print(welcome)

# 带参数的国际化文本
msg = ll.format_text("app.hello", "用户")
print(msg)  # 输出:你好,用户!

# 清理资源
ll.cleanup()

在Linux内核中使用

#include <linux/module.h>
#include <linux/kernel.h>
#include "kernel/include/log.h"
#include "kernel/include/lang.h"

static int __init logloom_test_init(void)
{
    // 初始化(配置通过参数传递)
    logloom_kernel_init();
    
    // 记录不同级别的日志
    KLOG_INFO("test", "内核模块已加载");
    KLOG_DEBUG("test", "调试信息");
    KLOG_WARN("test", "警告信息");
    
    // 使用国际化消息
    const char* msg = logloom_kernel_get_text("module.loaded");
    printk(KERN_INFO "%s\n", msg);
    
    return 0;
}

static void __exit logloom_test_exit(void)
{
    KLOG_INFO("test", "内核模块已卸载");
    logloom_kernel_cleanup();
}

module_init(logloom_test_init);
module_exit(logloom_test_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("作者");
MODULE_DESCRIPTION("Logloom内核模块示例");

配置

配置文件示例 (config.yaml)

logloom:
  # 语言设置
  language: "zh"  # 支持 "zh" 或 "en"
  
  # 日志配置
  log:
    # 日志级别: DEBUG, INFO, WARN, ERROR, FATAL
    level: "INFO"
    
    # 日志文件路径
    file: "logs/app.log"
    
    # 日志文件最大大小(字节)
    max_size: 1048576  # 1MB
    
    # 是否输出到控制台
    console: true
    
    # 格式配置
    format: "[{timestamp}][{level}][{module}] {message}"
    
    # 时间戳格式
    timestamp_format: "%Y-%m-%d %H:%M:%S"
  
  # 插件系统配置
  plugins:
    # 插件目录
    dir: "plugins"
    
    # 启用的插件列表
    enabled:
      - "filter_sensitive"
      - "sink_database"

国际化支持

添加新语言

  1. locales 目录下创建新的YAML文件,如 ja.yaml 用于日语
  2. 运行翻译生成工具: python tools/generate_lang_headers.py
  3. 重新编译项目

语言文件示例 (locales/zh.yaml)

system:
  start: "系统启动"
  shutdown: "系统关闭"
  error: "发生错误: {0}"
  
app:
  welcome: "欢迎使用Logloom"
  hello: "你好,{0}!"
  
errors:
  file_not_found: "找不到文件: {0}"
  permission: "权限不足"

动态注册语言资源 (Python)

自1.2.0版本起,Logloom支持在运行时动态注册新的语言资源文件:

import logloom_py as ll

# 初始化
ll.initialize("config.yaml")

# 注册单个语言资源文件
# 可以从文件名推断语言代码(如"fr.yaml"推断为法语)
ll.register_locale_file("/path/to/fr.yaml")
# 也可以显式指定语言代码
ll.register_locale_file("/path/to/custom_translations.yaml", "de")

# 注册整个目录中的语言资源文件
count = ll.register_locale_directory("/app/translations")
print(f"已注册{count}个语言资源文件")

# 查询支持的语言列表
languages = ll.get_supported_languages()
print(f"当前支持的语言: {', '.join(languages)}")  # 如: en, zh, fr, de

# 查询特定语言的所有翻译键
zh_keys = ll.get_language_keys("zh")
print(f"中文翻译键数量: {len(zh_keys)}")

# 使用新注册的语言
ll.set_language("fr")
welcome = ll.get_text("system.welcome")  # 获取法语欢迎消息

多语言环境配置

在配置文件中,可以指定默认语言和语言资源路径:

logloom:
  # 语言设置
  language: "zh"  # 默认语言
  
  # 国际化配置 (1.2.0版本新增)
  i18n:
    # 语言资源路径列表,支持glob模式
    locale_paths:
      - "./locales/*.yaml"
      - "./custom_translations/*.yaml"
    
    # 自动发现资源目录 (如果未指定默认为true)
    auto_discover: true

插件系统

创建自定义插件 (C语言)

#include "plugin.h"

// 初始化函数
static int sensitive_filter_init(const char* config_json) {
    // 解析配置...
    return 0; // 成功返回0
}

// 处理函数
static int sensitive_filter_process(log_entry_t* entry) {
    // 处理或修改日志条目...
    // 例如,替换敏感信息
    return 0; // 成功返回0
}

// 清理函数
static void sensitive_filter_cleanup(void) {
    // 清理资源...
}

// 导出插件定义
LOGLOOM_PLUGIN_DEFINE(
    "filter_sensitive",    // 插件名称
    "敏感信息过滤器",      // 插件描述
    PLUGIN_TYPE_FILTER,    // 插件类型
    sensitive_filter_init,
    sensitive_filter_process,
    sensitive_filter_cleanup
)

创建自定义插件 (Python)

import logloom_py as ll

# 定义自定义插件类
class SensitiveFilter:
    def __init__(self, config=None):
        self.config = config or {}
        self.patterns = self.config.get("patterns", ["password", "credit_card"])
    
    def process(self, log_entry):
        # 过滤或修改日志条目
        for pattern in self.patterns:
            if pattern in log_entry["message"]:
                # 替换敏感信息
                log_entry["message"] = log_entry["message"].replace(
                    pattern + "=", pattern + "=******"
                )
        return log_entry

# 注册插件
ll.register_plugin(SensitiveFilter)

构建与安装

预备条件

  • C编译器 (GCC 4.8+)
  • Python 3.6+ (用于Python绑定)
  • CMake 3.10+ (构建系统)
  • Linux内核头文件 (用于内核模块)

构建指令

# 克隆仓库
git clone https://github.com/yourusername/Logloom.git
cd Logloom

# 构建库和用户空间组件
make

# 构建内核模块
cd kernel
make

# 构建Python绑定
cd ../src/bindings/python
python setup.py build

# 安装Python包
python setup.py install

版本管理

Logloom使用集中式版本管理系统,通过单一版本源文件控制整个项目的版本号。

版本管理命令

# 检查版本号一致性
make version-check

# 更新所有文件的版本号(基于中央版本文件)
make version-update

# 设置新版本号(交互式)
make version-set

# 直接设置特定版本号
./tools/version_manager.py --set 1.2.1

版本管理系统工作原理

  1. 中央版本文件 version/VERSION 作为唯一的版本号真实来源
  2. 版本管理工具 tools/version_manager.py 根据中央版本文件自动更新:
    • C语言头文件 include/generated/version.h
    • 内核模块的版本声明
    • Python绑定中的版本号
    • README文件中的版本标记

开发和发布新版本时,只需更新中央版本文件,其余文件会自动同步,保证版本号一致性。

文档

完整的API参考和示例可在以下位置找到:

贡献

欢迎贡献!请查看贡献指南了解详情。

许可证

本项目采用MIT许可证 - 详见LICENSE文件。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published