一个轻量级的、国际化友好的、可扩展的日志系统,具备多平台支持能力,可用于用户空间应用和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- 安装 uv:
curl -LsSf https://astral.sh/uv/install.sh | sh- 克隆项目并设置环境:
git clone https://github.com/yourusername/logloom.git
cd logloom
uv sync # 自动创建虚拟环境并安装依赖- 运行Python测试:
uv run pytest tests/python/ -vpython3 -m venv .venv
source .venv/bin/activate
pip install -e .#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绑定:
# 使用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()#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内核模块示例");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"- 在
locales目录下创建新的YAML文件,如ja.yaml用于日语 - 运行翻译生成工具:
python tools/generate_lang_headers.py - 重新编译项目
system:
start: "系统启动"
shutdown: "系统关闭"
error: "发生错误: {0}"
app:
welcome: "欢迎使用Logloom"
hello: "你好,{0}!"
errors:
file_not_found: "找不到文件: {0}"
permission: "权限不足"自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#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
)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 installLogloom使用集中式版本管理系统,通过单一版本源文件控制整个项目的版本号。
# 检查版本号一致性
make version-check
# 更新所有文件的版本号(基于中央版本文件)
make version-update
# 设置新版本号(交互式)
make version-set
# 直接设置特定版本号
./tools/version_manager.py --set 1.2.1- 中央版本文件
version/VERSION作为唯一的版本号真实来源 - 版本管理工具
tools/version_manager.py根据中央版本文件自动更新:- C语言头文件
include/generated/version.h - 内核模块的版本声明
- Python绑定中的版本号
- README文件中的版本标记
- C语言头文件
开发和发布新版本时,只需更新中央版本文件,其余文件会自动同步,保证版本号一致性。
完整的API参考和示例可在以下位置找到:
欢迎贡献!请查看贡献指南了解详情。
本项目采用MIT许可证 - 详见LICENSE文件。