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

打印 上一主题 下一主题

主题 809|帖子 809|积分 2427

第四章 Syslog模式

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



  • 分类(Category):用于指定不同类型的日志条目。在zlog源代码中,分类是(zlog_category_t *)变量。在程序中,不同的分类使日志条目相互区分。
  • 格式(Format):描述详细的日志模式,如是否包罗时间戳、源文件和源代码行。
  • 规则(Rule):由分类、级别、输出文件(或其他渠道)和格式组成。简言之,假如配置文件中的规则中的分类字符串与源代码中的分类变量名称匹配,则规则生效。
示例代码:
  1. zlog_category_t *c;
  2. c = zlog_get_category("my_cat");
  3. zlog_info(c, "hello, zlog
  4. ");
复制代码
假设配置文件中的规则如下:
  1. [rules]
  2. my_cat.DEBUG >stdout; simple
复制代码
zlog库将使用分类名称“my_cat”匹配配置文件中的规则。在规则中指定的级别条件满足(INFO >= DEBUG),所以日志输出到尺度输出(stdout)。
输出内容:
  1. hello, zlog
复制代码
4.2 Syslog模型与log4j模型的区别

zlog与syslog有何关系?实际上模型更接近log4j。在log4j中,有logger、appender和layout的概念。区别在于,在log4j中,每个logger在源代码中必须与配置文件中的一个logger对应,而且只有一个明确的级别。log4j模型不敷机动,为此引入了filters,但使问题更复杂。而syslog模型设计优秀。
继续前节的例子,假如zlog配置文件有两个规则:
  1. [rules]
  2. my_cat.DEBUG >stdout; simple
  3. my_cat.INFO >stdout;
复制代码
将生成两个日志输出:
  1. hello, zlog
  2. 2012-05-29 10:41:36 INFO [11288:test_hello.c:41] hello, zlog
复制代码
一个分类在源代码中对应着配置文件中的两个规则。
再看一个示例配置文件:
  1. [rules]
  2. my_cat.WARN "/var/log/aa.log"
  3. my_cat.DEBUG "/var/log/bb.log"
复制代码
源代码:
  1. zlog_info(c, "info, zlog");
  2. zlog_debug(c, "debug, zlog");
复制代码
在aa.log中只有一条日志:
  1. 2012-05-29 10:41:36 INFO [11288:test_hello.c:41] info, zlog
复制代码
而在bb.log中有两条日志:
  1. 2012-05-29 10:41:36 INFO \[11288\:test\_hello.c:41] info, zlog
  2. 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中“*”同样匹配全部分类。这是一种方便的方法,能将体系多组件生成的全部错误重定向到一个日志文件中。配置文件可这么写:
  1. [rules]
  2. *.error "/var/log/error.log"
复制代码
zlog的一个独特特性是子分类匹配。假如源代码为:
  1. c = zlog_get_category("my_cat");
复制代码
配置文件中的规则如下:
  1. [rules]
  2. my_cat.* "/var/log/my_cat.log"
  3. my_.NOTICE "/var/log/my.log"
复制代码
规则匹配分类名称为`“my_cat”`的日志。通配符“_”表现超种别(super category),“my_”是“my_cat”和“my_dog”的超种别。另有通配符“!”,详见[Category-Matching]。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用户国营

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表