C语言日志类库 zlog 使用指南(第四章 Syslog模式)

server/2024/10/9 15:18:46/

第四章 Syslog模式

在zlog中,有三个重要概念:分类(Category)、规则(Rule)和格式(Format)。

4.1 分类、规则和格式

  • 分类(Category):用于指定不同类型的日志条目。在zlog源代码中,分类是(zlog_category_t *)变量。在程序中,不同的分类使日志条目互相区分。
  • 格式(Format):描述详细的日志模式,如是否包含时间戳、源文件和源代码行。
  • 规则(Rule):由分类、级别、输出文件(或其他渠道)和格式组成。简言之,如果配置文件中的规则中的分类字符串与源代码中的分类变量名称匹配,则规则生效。

示例代码:

zlog_category_t *c;c = zlog_get_category("my_cat");zlog_info(c, "hello, zlog");

假设配置文件中的规则如下:

[rules]
my_cat.DEBUG >stdout; simple

zlog库将使用分类名称“my_cat”匹配配置文件中的规则。在规则中指定的级别条件满足(INFO >= DEBUG),所以日志输出到标准输出(stdout)。

输出内容:

hello, zlog

4.2 Syslog模型与log4j模型的区别

zlog与syslog有何关系?实际上模型更接近log4j。在log4j中,有logger、appender和layout的概念。区别在于,在log4j中,每个logger在源代码中必须与配置文件中的一个logger对应,并且只有一个明确的级别。log4j模型不够灵活,为此引入了filters,但使问题更复杂。而syslog模型设计优秀。

继续前节的例子,如果zlog配置文件有两个规则:

[rules]my_cat.DEBUG >stdout; simplemy_cat.INFO >stdout;

将生成两个日志输出:

hello, zlog
2012-05-29 10:41:36 INFO [11288:test_hello.c:41] hello, zlog

一个分类在源代码中对应着配置文件中的两个规则。

再看一个示例配置文件:

[rules]my_cat.WARN "/var/log/aa.log"my_cat.DEBUG "/var/log/bb.log"

源代码:

zlog_info(c, "info, zlog");
zlog_debug(c, "debug, zlog");

aa.log中只有一条日志:

2012-05-29 10:41:36 INFO [11288:test_hello.c:41] info, zlog

而在bb.log中有两条日志:

2012-05-29 10:41:36 INFO \[11288\:test\_hello.c:41] info, zlog
2012-05-29 10:41:36 DEBUG \[11288\:test\_hello.c:42] debug, zlog

由此可见,zlog中的一个分类可以对应多个规则,并且规则可以有不同的级别、输出和格式的组合,从而提供了一种简单、清晰的方式来过滤和多输出日志。

4.3 扩展syslog模型

分类在zlog中类似于syslog中的facility。不幸的是,syslog中的facility是一个int类型,值必须从系统定义的有限范围内选择。zlog做得更好,使其成为字符串变量。

在syslog中,有一个特殊通配符“*”,匹配所有设施。zlog中“*”同样匹配所有分类。这是一种方便的方法,能将系统多组件生成的所有错误重定向到一个日志文件中。配置文件可这么写:

[rules]
*.error "/var/log/error.log"

zlog的一个独特特性是子分类匹配。如果源代码为:

c = zlog_get_category("my_cat");

配置文件中的规则如下:

[rules]my_cat.* "/var/log/my_cat.log"my_.NOTICE "/var/log/my.log"

规则匹配分类名称为`“my_cat”`的日志。通配符“_”表示超类别(super category),“my_”是“my_cat”和“my_dog”的超类别。另有通配符“!”,详见[Category-Matching]。


http://www.ppmy.cn/server/126512.html

相关文章

Rstudio:强大的R语言集成开发环境(IDE)

Rstudio 应该是 R 语言使用的标配,尽管 Rstudio 的母公司 Posit 推出了新一代的集成开发环境 Positron,但其还处于开发阶段。作为用户不妨让其成熟后再使用,现阶段还是 Rstudio 更稳定。 如果你在生物信息学或统计学领域工作,R语言…

【分布式微服务云原生】消息队列全解析:原理、应用场景与主流MQ对比

消息队列全解析:原理、应用场景与主流MQ对比 摘要 在快速发展的软件架构中,消息队列(MQ)扮演着至关重要的角色。它不仅实现了系统间的异步通信,还提供了应用解耦、流量削峰等关键功能。本文将深入探讨消息队列的工作原…

洛谷 P11045 [蓝桥杯 2024 省 Java B] 最优分组

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 首先得注意这么一点: k k k 必须得是 n n n 的因数(这里的 n , k n,k n,k 对应于题目的 N ,…

《深度学习》OpenCV 角点检测、特征提取SIFT 原理及案例解析

目录 一、角点检测 1、什么是角点检测 2、检测流程 1)输入图像 2)图像预处理 3)特征提取 4)角点检测 5)角点定位和标记 6)角点筛选或后处理(可选) 7)输出结果 3、邻域…

C++ 线性表、内存操作、 迭代器,数据与算法分离。

线性表: 线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的 一种,一个线性表是n个具有相同特性的数据元素的有限序列。 线性表中数据元素之间的关系是一对一的关系,即除了第一个和…

【git】通过配置 `init.defaultBranch`,自定义 Git 初始化时的默认分支名称,避免使用 `master` 并消除相关的警告提示

Git 会提示你配置一个默认的初始分支名称 git init 提示:使用 ‘master’ 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中 提示:配置使用初始分支名,并消除这条警告,请执行: 提示: 提示&am…

废品回收小程序/环保垃圾回收/收二手垃圾小程序/分类资源回收系统/独立版系统源码

>>>系统简述: 1.以微信小程序为基础进行开发,体验好,操作方便 2.从用户下单到回收员接单,在到回收站接收,在到代理全流程通过手机端管理 3.支持废品分类下单,并支持分类数据统计 4.独创回收员多个…

Hive数仓操作(四)

一、Hive 创建表案例一(ARRAY数组类型) 1. 准备数据文件 首先,准备一个名为 stu2.txt 的文件,文件内容示例如下: 1001 Alice fish,cat 1002 Bob dog,rabbit 1003 Charlie bird注意: …