当前位置:   article > 正文

zlog编译与配置使用示例_zlog配置文件

zlog配置文件

 zlog简介

嵌入式linux上开发,想找个C的日志库,最终选择了zlog,详细的介绍请网上自找,这里只简单的介绍下。

zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。

zlog的目标是成为一个简而精的日志函数库,不会直接支持网络输出或者写入数据库,不会直接支持日志内容的过滤和解析。

zlog编译

源码下载地址


https://github.com/HardySimpson/zlog/releases

这里下载的是zlog-1.2.16版本。

普通linux编译

  1. tar -zxvf zlog-1.2.16.tar.gz
  2. cd zlog-1.2.16
  3. make
  4. sudo make install

也可以指定自己想要的路径

  1. tar -zxvf zlog-1.2.16.tar.gz
  2. cd zlog-1.2.16
  3. make PREFIX=/usr/local/
  4. sudo make PREFIX=/usr/local/ install

交叉编译

以sigmastar ssc335/337交叉编译工具链为例

  1. tar -zxvf zlog-1.2.16.tar.gz
  2. cd zlog-1.2.16
  3. mkdir installdir
  4. make PREFIX=./installdir/  CC=arm-buildroot-linux-uclibcgnueabihf-gcc
  5. sudo make PREFIX=./installdir/ install

DEMO测试代码

 创建源码文件testzlog.c,代码如下

  1. #include <stdio.h> 
  2. #include "zlog.h"
  3. int main(int argc, char** argv)
  4. {
  5.     int rc;
  6.     zlog_category_t *c;
  7.     rc = zlog_init("zlog.conf");
  8.     if (rc) {
  9.         printf("init failed\n");
  10.         return -1;
  11.     }
  12.     c = zlog_get_category("my_cat");
  13.     if (!c) {
  14.         printf("get cat fail\n");
  15.         zlog_fini();
  16.         return -2;
  17.     }
  18.     zlog_debug(c, "debug level log");
  19.     zlog_info(c, "info level log");
  20. zlog_warn(c, "warning level log");
  21. zlog_error(c, "error level log");
  22.     zlog_fini();
  23.     return 0;
  24. }


注意其中的2个函数,
zlog_init()用来加载zlog库的配置文件,
zlog_get_category()用来从配置文件规则中找到对应名称的分类配置。

编译DEMO

gcc testzlog.c -I/usr/local/include -L/usr/local/lib -lzlog -lpthread -o testzlog

链接需要zlog库不用多说,需要pthread库是因为zlog库有锁的使用。
测试DEMO怎么使用在下一章节zlog配置里详细讲,因为同一个代码,日志效果会因配置文件不同而呈现不同。

 

zlog配置

zlog里面有三个重要的概念:
分类(Category) 用于区分不同的输入,代码中的分类变量的名字是一个字符串,在一个程序里面可以通过获取不同的分类名的category用来后面输出不同分类的日志,用于不同的目的。
格式(Format) 是用来描述输出日志的格式,比如是否有带有时间戳, 是否包含文件位置信息等。
规则(Rule) 是把分类、级别、输出文件、格式组合起来,决定一条代码中的日志是否输出,输出到哪里,以什么格式输出。

配置示例

创建配置文件zlog.conf,内容如下

  1. [formats]
  2. dbg_fmt = "%m%n"
  3. log_fmt = "%d([%Y/%m/%d %T])%m%n"
  4. [rules]
  5. my_cat.debug    >stdout; dbg_fmt
  6. my_log.info    "/home/kevin/tempdir/testzlog/aa.log", 1M; log_fmt

格式(Format)说明

[formats]全部的配置格式串说明请参阅官方指导文档,这里只列出一些常用配置说明,格式串可以组合来达到自己想要的一个格式化效果。

[formats]常用配置说明

format格式串

说明

%m

用户输入的日志内容

%n

表示换行

%d

日期时间 2020-03-12 21:21:32

特殊用法,后面跟小括号说明:

%d(%Y/%m/%d %T)  = 2020/03/12 21:21:32

%d(%Y/%m/%d %H:%M:%S)  = 2020/03/12 21:21:32

%d(%F)  = 2020-03-12

%d(%T)  = 21:21:32

%ms

毫秒时间,3位数

%us

微秒时间,6位数

%F

文件名,有的环境是完整地址文件名,有的只是文件名

%f

纯文件名,不含地址路径

%U

函数名

%L

行号

%V

大写日志等级"DEBUG", "INFO", "NOTICE", "WARN", "ERROR"和"FATAL"

%v

小写日志等级

配置示例1

  1. [formats]
  2. dbg_fmt = "%m%n"

配置示例1日志样例

debug level log

info level log

warning level log

error level log

配置示例2

  1. [formats]
  2. dbg_fmt = "[%d]%m%n"

配置示例2日志样例

[2023-03-12 19:13:53]debug level log

[2023-03-12 19:13:53]info level log

[2023-03-12 19:13:53]warning level log

[2023-03-12 19:13:53]error level log

配置示例3

  1. [formats]
  2. dbg_fmt = "%d %V[%F:%U:%L] %m%n"

配置示例3日志样例

2023-03-12 19:13:53 DEBUG[testzlog.c:main:22]debug level log

2023-03-12 19:13:53 INFO[testzlog.c:main:23]info level log

2023-03-12 19:13:53 WARN[testzlog.c:main:24]warning level log

2023-03-12 19:13:53 ERROR[testzlog.c:main:25]error level log

规则(Rule)说明

规则是一个统合型配置行,语法是:

(category).(level) (output), (options, optional); (format name, optional)

用于描述怎么把分类、级别、输出文件、格式组合起来。

rule配置行用3种颜色分成3块,下面分别说明:

第一块,是分类与等级 (category).(level)

其中的(category)是分类名称,对应代码中

zlog_get_category("my_cat");

代码接口指示zlog去配置文件中找到名字是"my_cat"的分类。

另外(level)对应日志等级,等级有"DEBUG", "INFO", "NOTICE", "WARN", "ERROR"和"FATAL",配置文件中的级别是大小写不敏感的。

(level)表达式示例

含义

*

所有等级的日志都输出

my_cat.debug

代码内等级>=debug的日志都输出

my_cat.=debug

代码内等级==debug的日志才输出

my_cat.!debug

代码内等级!=debug的日志才输出

第二块是输出 (output), (options, optional);

表示log输出到哪里的配置,只列举常用的

(output)

输出说明

(options, optional)

扩展说明

>stdout

标准输出

无意义

>stderr

标准错误输出

无意义

"文件路径"

输出到文件

10M * 3 ~ "filename.#r.log"

转档的文件大小是10M,3个日志文件循环,#r指循环文件名倒序排列

第三块是格式化名称 (format name, optional)

表示日志按怎样的格式输出,详细说明参考前面章节格式(Format)说明

示例1说明

  1. [formats]
  2. dbg_fmt = "%d %m%n"
  3. [rules]
  4. my_cat.DEBUG   >stdout; dbg_fmt

my_cat分类,日志等级大于等于DEBUG,按dbg_fmt格式配置输出到标准输出

2023-03-12 19:13:53 debug level log

2023-03-12 19:13:53 info level log

2023-03-12 19:13:53 warning level log

2023-03-12 19:13:53 error level log

示例2说明

  1. [formats]
  2. dbg_fmt = "%d %m%n"
  3. [rules]
  4. my_cat.WARN   "/home/kevin/log.txt"; dbg_fmt

my_cat分类,日志等级大于等于WARN,按dbg_fmt格式配置输出到log文件/home/kevin/log.txt

2023-03-12 19:13:53 warning level log

2023-03-12 19:13:53 error level log

示例3说明

  1. [formats]
  2. dbg_fmt = "%d %m%n"
  3. [rules]
  4. my_cat.WARN   "/home/kevin/log.txt", 1M * 3 ~ "/home/kevin/log.txt.#r"; dbg_fmt

按照日志大小切分。日志文件名(/home/kevin/log.txt)的逗号后

第一个参数(1M)表示文件达到多大后开始进行转档;

第二个参数(3)表示保留多少个存档文件(0代表不删除任何存档文件,当心空间占满问题);

第三个参数(/home/kevin/log.txt.#r )表示转档的文件名,其中#r表示存档文件的序号,r是rolling的缩写,还可以放#s,是sequence的缩写。转档文件名必须包含#r或者#s。

在Sequence情况 下

log.txt (new)

log.txt.2 (less new)

log.txt.1

log.txt.0 (old)

而在Rolling的情况下

log.txt (new)

log.txt.0 (less new)

log.txt.1

log.txt.2 (old)

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/194998
推荐阅读
相关标签
  

闽ICP备14008679号