赞
踩
最近在C语言开发的项目中需要建立一个比较完善的日志系统,方便研发及后期维护管理。于是就找到了zlog,zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。
其优势及详细用法直接看手册(zlog使用手册中文版): http://hardysimpson.github.io/zlog/UsersGuide-CN.html
若链接进不去可自行下载:https://download.csdn.net/download/fangye945a/10902503
# git clone https://github.com/HardySimpson/zlog.git //下载源码包
# cd zlog //进入工程目录
# mkdir build_linux build_arm //创建文件夹用于存放工程输出内容
# vim src/makefile //修改makefile中的PREFIX为自己创建的目录,如下图所示
# make //默认gcc编译,若需要交叉编译指定编译工具链即可:make CC=arm-linux-xxx-gcc
# make install //将生成的库和工具拷贝至自己创建的目录
默认安装路径是/usr/local,修改安装路径为自己创建的目录路径:
编译出arm和linux两个版本的库如下图所示:
只需要包含zlog.h头文件即可使用,根据配置文件输出日志信息。如下为忽略分类(zlog_category_t)的一组简单zlog接口dzlog写的示例程序。
#include <stdio.h>
#include "zlog.h"
int main(int argc,char *argv[])
{
int rc;
rc = dzlog_init("zlog.conf", "my_class"); //指定配置文件路径及类型名 初始化zlog
if (rc)
{
printf("init failed\n");
return -1;
}
dzlog_info("hello, zlog info"); //打印普通信息
dzlog_error("hello, zlog error");//打印错误信息
dzlog_warn("hello, zlog warning"); //打印报警信息
dzlog_debug("hello, zlog debug"); //打印调试信息
zlog_fini(); //释放zlog
return 0;
}
动态编译:gcc main.c -o test_zlog -I …/include -L …/lib/ -lzlog
静态编译:gcc main.c -o test_zlog -I …/include -L …/lib/ -static -lzlog -lpthread //需要依赖线程库
大部分的zlog的行为都取决于配置文件,比如把日志打到哪里去,用什么格式,怎么转档,都由配置文件来决定。
以如下配置文件为例:
[global]
strict init = true
buffer min = 1024
buffer max = 2MB
rotate lock file = /tmp/zlog.lock
default format = "%d.%us %-6V (%c:%F:%L) - %m%n"
file perms = 600
[rules]
my_class.* >stdout;
其中:[global]为全局参数
• strict init
如果"strict init"是true,zlog_init()将会严格检查所有的格式和规则,任何错误都会导致zlog_init() 失败并且返回-1。当"strict init"是false的时候,zlog_init()时会忽略错误的格式和规则。这个参数默认为true
• buffer min
• buffer max
zlog在堆上为每个线程申请缓存。“buffer min"是单个缓存的最小值,zlog_init()的时候申请这个长度的内存。写日志的时候,如果单条日志长度大于缓存,缓存会自动扩充,直到到"buffer max”。单条日志再长超过"buffer max"就会被截断。如果"buffer max" 是0,意味着不限制缓存,每次扩充为原先的2倍,直到这个进程用完所有内存为止。缓存大小可以加上KB, MB 或GB这些单位。默认来说"buffer min"是1K , “buffer max” 是2MB。(其单位不区分大小写)
• rotate lock file
这个选项指定了一个锁文件,用来保证多进程情况下日志安全转档。zlog会在zlog_init()时候以读写权限打开这个文件。确认你执行程序的用户有权限创建和读写这个文件。
• default format
这个参数是缺省的日志格式,默认值为:"%d %V [%p:%F:%L] %m%n"
这种格式产生的输出类似这样:2012-02-14 17:03:12 INFO [3758:test_hello.c:39] hello, zlog
详细可参考下表:
• file perms
这个指定了创建日志文件的缺省访问权限。必须注意的是最后的产生的日志文件的权限
为"file perms"& ~umask。默认为600,只允许当前用户读写。
[levels]
用于定义用户自己的日志等级,建议和用户自定义的日志记录宏一起使用。若不自定义等级可不写。
语法为: (level string) = (level int), (syslog level, optional)
(level int)必须在[1,253]这个范围内,越大越重要。(syslog level)是可选的,如果不设默认为LOG_DEBUG。
zlog有6个默认的级别:“DEBUG”, “INFO”, “NOTICE”, “WARN”, “ERROR"和"FATAL”。
[format]
格式(Format)是用来描述输出日志的格式,比如是否有带有时间戳,是否包含文件位置信息等。
[rules]
规则(Rule)则是把分类、级别、输出文件、格式组合起来,决定一条代码中的日志是否输出,输出到哪里,以什么格式输出。
修改完配置文件后,往往需要检查配置文件是否合法,zlog工程在编译输出的bin目录下提供了命令行工具。
使用方法:./zlog-chk-conf xxx.conf
输出:–[zlog.conf] syntax right
则表示配置文件语法正确。
zlog详细配置方法可参考手册或者该博客:https://blog.csdn.net/yangzhenzhen/article/details/8439459
感谢源作者辛苦付出: fangye945a
yangzhenzhen
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。