C语言日志类库 zlog 使用指南(第一章 什么是 zlog)
第一章 什么是 zlog
1. zlog 是什么?
zlog 是一个可靠、高性能、线程安全、灵活、模型清晰的纯 C 语言日志库。
在 C 语言世界中,没有像 Java 的 logback 或 C++ 的 log4cxx 这样的优秀日志库。虽然 printf 可以使用,但它很难重定向或重新格式化,而 syslog 速度较慢,主要设计用于系统用途。
因此,我编写了 zlog。
zlog 比 log4c 更快、更安全、更强大,因此可以广泛使用。
zlog 的特性包括:
- syslog 模型,比 log4j 模型更好
- 日志格式自定义
- 多种输出方式,包括静态文件路径、动态文件路径、stdout、stderr、syslog、用户定义的输出
- 配置在运行时可以手动或自动刷新(并且是安全的)
- 高性能,每秒 250,000 条日志记录,比 rsyslogd 的 syslog(3) 快约 1000 倍
- 用户定义日志级别
- 在多进程或多线程情况下安全地轮转日志文件
- 精确到微秒
- dzlog,一个默认类别日志 API,便于使用
- MDC,一种 log4j 风格的键值映射表
- 自我调试,可以在运行时输出 zlog 的自调试和错误日志*
- 不依赖任何其他第三方库,只基于 POSIX 系统(包括 pthread)和 C99 兼容的 vsnprintf
链接:
- 主页: zlog 主页
- 下载: zlog 下载
- 作者邮箱: HardySimpson1984@gmail.com
1.1 兼容性说明
- zlog 基于 POSIX 兼容系统。作者仅在 GNU/Linux 和 AIX 环境中编译、测试和运行 zlog。不过,zlog 应该也能在 FreeBSD、NetBSD、OpenBSD、OpenSolaris 和 Mac OS X 等系统上运行良好。欢迎在任何系统上测试 zlog。
- zlog 使用 C99 兼容的 vsnprintf 特性。如果目标缓冲区的大小不够,vsnprintf 将返回应该写入最终字符串的字符数(不包括尾随的 ‘\0’)。如果系统上的 vsnprintf 不支持这一特性,当单个日志超过缓冲区大小时,zlog 将无法确定正确的缓冲区大小。好在 glibc 2.1、AIX 的 libc 和 freebsd 的 libc 均工作正常,而 glibc 2.0 不支持这一特性。在这种情况下,用户需要使用 C99 兼容的 vsnprintf 自行修正 zlog。可以尝试 ctrio 或 C99-snprintf。需修正的文件是 buf.c,祝成功!
- 一些人提供了适用于其他平台的 zlog 版本,感谢这些贡献!
- auto tools 版本: auto tools 版本 zlog
- cmake 版本: cmake 版本 zlog
- windows 版本: windows 版本 zlog
1.2 zlog 1.2 发行说明
1. zlog 1.2 提供以下新特性:
- 支持管道输出,现在 zlog 可以通过类似 cronolog 的程序发送日志输出
- 完整的日志轮转支持
- 其他代码兼容性细节和错误修复
2. zlog 1.2 与 zlog 1.0 二进制兼容。主要区别如下:
- 所有 zlog 宏(如 ZLOG_INFO )变更为小写版本(例如 zlog_info)。这次大的变更是为了简化输入。如果你在使用之前的 zlog 版本,请使用脚本替换所有宏并重新编译你的程序。例如:
sed -i -e 's/\b\w*ZLOG\w*\b/\L&\E/g' aa.c
- 放弃了 auto tools 编译。由于 auto tools 不友好,现使用简单的 makefile,这需要 gcc 和 gnu make。如果这个 makefile 在你的环境中无法工作,你需要自己编写一个适用的 makefile。对于极客来说,这应该很容易。
补充一:请问上文中提到的 cronolog 是什么?
cronolog 是一个用于日志文件管理的工具,主要用于将日志文件按时间或大小进行切分(轮转)。它能够根据给定的时间模式将日志文件分割成多个部分,并将日志数据重定向到新的文件中。这样一来,日志文件不会一直增长,便于管理和查看。
cronolog 的主要功能:
- 按时间轮转日志:可以根据时间(如每天、每周、每个月)将日志文件切分成多个部分。
- 按大小轮转日志:可以设置日志文件达到一定大小后进行切分。
- 自动归档旧日志:旧的日志文件可以自动归档并根据指定模式命名。
使用场景:
- Web服务器日志管理:可以每天生成一个新日志文件,便于日志分析和备份。
- 应用程序日志管理:防止日志文件因为过大而难以处理。
一个简单的使用示例:
假设你有一个应用程序会不断地输出日志,你可以使用 cronolog 将这些日志按天归档。
your_application | cronolog /var/log/your_application/%Y%m%d.log
这会将日志按年月日生成不同的文件,例如 `20230101.log`,`20230102.log` 等。
安装 cronolog:
在大多数 Linux 发行版中,可以直接通过包管理器进行安装。例如,在 Debian/Ubuntu 系统中:
sudo apt-get install cronolog
在 Red Hat/CentOS 系统中:
sudo yum install cronolog
通过使用 cronolog,你可以更加灵活地管理 zlog 生成的日志文件,实现自动化的日志归档和清理,确保日志文件始终处于可控状态。
补充二:请详细讲解命令 ‘’‘sed -i -e ‘s/\b\w*ZLOG\w*\b/\L&\E/g’ aa.c’‘’
这条命令使用了 sed
(stream editor)工具来批量替换文件中的文本内容。具体来说,这条命令将 aa.c
文件中的所有大写的 ZLOG
宏替换为小写形式。让我们逐步拆解和解释这条命令:
命令结构
sed -i -e 's/\b\w*ZLOG\w*\b/\L&\E/g' aa.c
sed
: 这是 Unix/Linux 中的流编辑器,用于解析和转换文本。-i
: 表示直接在文件内进行编辑(in-place),而不是输出到标准输出。如果不使用这个选项,sed
只会将结果输出到终端,而不会更改文件内容。-e
: 这个选项允许在命令行中指定sed
脚本。
sed 脚本解释
's/\b\w*ZLOG\w*\b/\L&\E/g'
s
: 这是sed
的子命令,表示替换(substitute)。\b
: 单词边界,确保匹配整个单词而不是单词的一部分。\w*ZLOG\w*
`: 这里的\w*
表示匹配字母、数字或下划线字符的零个或多个,即ZLOG
前后可能会有其他字符,例如ZLOG_
、_ZLOG
或ZLOG123
。\b
: 再次指定单词边界。/
: 分隔符,sed
使用/
来分隔要匹配的模式和要替换的字符串。\L
: 这个是sed
的扩展语法,用于将接下来的字符转换为小写。&
: 这个符号在替换部分表示整个匹配到的文本。\E
: 关闭小写转换。g
: 全局替换标志,表示在每行中替换所有匹配项,而不仅是第一个。
整合解释
s/\b\w*ZLOG\w*\b
: 这部分表示找到以单词边界开始和结束的包含ZLOG
的单词。/\L&\E/
: 这部分表示将找到的匹配内容(用&
表示)转换为小写。g
: 这部分表示在整行中查找所有符合模式的内容并进行替换,而不仅仅是第一个匹配。
应用到文件
aa.c
: 这是命令操作的目标文件。sed
将在 aa.c
文件中查找所有符合模式的内容并进行替换,最后保存修改。
完整工作流程
所以,命令 sed -i -e 's/\b\w*ZLOG\w*\b/\L&\E/g' aa.c
的完整工作流程如下:
1. 文件 aa.c
被读取。
2. 查找所有以 ZLOG
开头或结尾并且在单词边界内的内容。
3. 将这些匹配内容转换为小写。
4. 将修改后的内容直接覆盖原文件 aa.c
。
通过这条命令,可以轻松将文件中的所有大写 ZLOG
宏改为小写形式,便于统一代码风格。
原文地址:https://blog.csdn.net/fjw12998/article/details/142626578
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!