C语言库zlog日志库工具
C语言库zlog日志库工具
- 介绍
-
- 1. 核心特性
- 2. 设计模型
- 3. 功能亮点
- 4. 应用场景
- 5. 对比优势
- 6. 局限性
- 使用方法
-
- 一、安装与编译
- 二、配置文件核心语法
- 三、高级功能
- 四、调试与验证
- 五、示例配置文件
- 示例demo
-
- 一、基础分类日志输出(文件+控制台)
- 二、多分类输出到不同文件
- 三、动态刷新配置(无需重启程序)
- 四、日志滚动(按大小分割)
- 五、简化接口(dzlog全局分类)
zlog官网
介绍
zlog是一个专为C语言设计的高性能、高可靠性日志函数库,具有以下核心特性与功能:
1. 核心特性
高性能:支持每秒数万至数十万条日志记录(具体性能因配置而异,最高可达72,000条/秒),远超传统syslog的性能。
线程安全与进程安全:适用于多线程和多进程环境,支持安全日志转档(日志文件按大小自动分割)。
纯C实现:无第三方依赖,兼容POSIX系统和C99标准,适用于嵌入式Linux及其他资源受限环境。
2. 设计模型
分类(Category):通过字符串标识不同日志来源,例如代码中可通过不同分类名输出不同目的的日志。
规则(Rule):将分类、日志级别、输出目标(如文件、标准输出)和格式动态绑定,实现灵活的日志过滤与分发。
格式(Format):自定义日志输出模板,支持时间戳、文件位置、微秒级精度等字段,类似log4j的Pattern Layout。
3. 功能亮点
动态配置:通过配置文件(如zlog.conf)定义日志行为,无需修改代码即可调整日志格式、级别和输出路径。
多输出支持:包括动态/静态文件、标准输出(stdout/stderr)、syslog及用户自定义输出函数。
运行时配置刷新:通过zlog_reload()函数动态加载新配置,适用于服务不中断的场景。
自定义日志级别:允许用户扩展默认的6级日志(DEBUG、INFO、NOTICE、WARN、ERROR、FATAL)。
4. 应用场景
嵌入式系统:因其轻量化和高性能特性,广泛用于嵌入式Linux项目。
服务器端程序:适合需要高吞吐日志记录的分布式系统。
跨平台开发:支持Linux、Windows、Android、iOS等平台。
5. 对比优势
优于syslog:速度更快(可达syslog的数百倍),功能更灵活。
优于log4c:功能更全面,安全性更高,且持续维护。
6. 局限性
不直接支持网络/数据库输出:需配合外部工具(如rsyslog、Logstash)实现日志远程存储或分析。
综上,zlog凭借其高效性和灵活性,成为C语言项目中替代printf、syslog及传统日志库的优选方案,尤其适合对性能和资源占用敏感的嵌入式场景
使用方法
以下是zlog库的详细使用方法,涵盖配置、初始化、日志输出及高级功能:
一、安装与编译
源码安装
下载源码并解压后,执行以下命令:
bash
$ ./configure --enable-test # 包含测试案例
$ make
$ sudo make install # 默认安装至/usr/local
交叉编译:修改src/Makefile中的CC和AR为交叉工具链路径后编译。
验证安装
编译后生成libzlog.so和libzlog.a,需在程序中链接-lzlog并包含头文件zlog.h。
二、配置文件核心语法
配置文件(如zlog.conf)通过分类(Category)、格式(Format)、规则(Rule)控制日志行为:
全局参数(Global)
strict init:设为true时严格检查配置错误,建议开发阶段启用。
buffer min/max:日志缓存大小(默认1KB~2MB),支持单位如KB、MB。
file perms:日志文件权限(默认600)。
格式(Format)
定义日志输出模板,支持占位符如:
%d(%F %T.%us):时间戳(含微秒)
%V:日志级别(如INFO)
%F:%L:文件名和行号
示例:simple = “%d.%-8.8us %-5V [%F:%L] %m%n”
规则(Rule)
绑定分类、级别、输出目标及格式:
基本规则:my_cat.INFO “./logs/app.log”, 10MB; simple
(将my_cat分类的INFO及以上日志输出到文件,按10MB切分)
多目标输出:my_cat.* >stdout; my_cat.ERROR syslog
三、高级功能
动态刷新配置
调用zlog_reload()可重新加载配置文件,无需重启程序。
日志转档(Rotate)
按大小切分:my_cat.INFO “./logs/app.log”, 100MB * 5 “./logs/app.log.#r”;
(保留5个历史文件,按序号滚动)
按时间切分:my_cat.* “./logs/%c.%d(%Y%m%d).log”;
自定义日志级别
在配置文件中扩展级别:
ini
[levels]
TRACE = 10
CRITICAL = 130, LOG_CRIT
四、调试与验证
检查配置文件语法
使用zlog-chk-conf工具验证配置正确性:
bash
$ ./zlog-chk-conf zlog.conf
多进程/线程安全
zlog通过锁文件(如/tmp/zlog.lock)保证多进程下日志转档安全。
五、示例配置文件
ini
[global]
strict init = true
buffer min = 1KB
file perms = 600
[formats]
detailed = “%d(%F %T.%us) %-5V [%p:%F:%L] %m%n”
[rules]
default.* >stdout; detailed
server.* “/var/log/server.log”, 50MB; detailed
通过上述步骤,可快速集成zlog至C项目中,实现高性能、可定制的日志管理。
示例demo
一、基础分类日志输出(文件+控制台)
配置文件 demo1.conf
ini
[global]
strict init = true
file perms = 600
[for