zlog简述:

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

事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx)。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件。syslog是个系统级别的轮子,不过速度慢,而且功能比较单调。log4c异常坑爹(有内存泄漏、效率低等等),而且已经停止开发

zlog有这些特性:

*  syslog分类模型,基于规则路由过滤,比log4j模型要正确高效,详见为什么log4j的概念模型是错误的

*  日志格式定制,类似于log4j的pattern layout

*  多种输出,包括动态文件、静态文件、stdout、stderr、syslog、用户自定义输出函数

*  运行时手动或自动刷新配置(同时保证安全)

*  高性能,在我的笔记本上达到338'638条日志每秒, 大概是syslog(3)配合rsyslogd的1000倍速度

*  高可靠性和速度之间的平衡,用户自定义多少条日志后fsync数据到硬盘

*  用户自定义等级

*  多线程和多进程环境下保证安全转档

*  精确到微秒

*  简单调用包装dzlog(一个程序默认只用一个分类)

*  MDC,线程键-值对的表,可以扩展用户自定义的字段

*  自诊断,可以在运行时输出zlog自己的日志和配置状态

*  不依赖其他库,只要是个POSIX系统就成(当然还要一个C99兼容的vsnprintf)

http://hardysimpson.github.io/zlog/ 下载最新的zlog源码包。

1. tar -zxvf zlog-1.2.12.tar.gz 解压到当前目录。

2. 进入zlog-1.2.12, 执行make,在zlog-1.2.12/src/ 目录下生成libzlog.a 静态库和libzlog.so动态库。

3.编写测试程序test.c

  1. #include "zlog.h"
  2. #include <stdio.h>
  3. int main()
  4. {
  5. int rc;
  6. zlog_category_t *zc;
  7. rc = dzlog_init("./test.conf", "my_cat");
  8. if (rc) {
  9. printf("init failed\n");
  10. zlog_fini();
  11. return -;
  12. }
  13. int a = ;
  14. char str[] = "12asfew";
  15. dzlog_info("hello, zlog %d, %s", a, str);
  16. dzlog_debug("test aa");
  17. zlog_fini();
  18. return ;
  19. }

5. 编写一个最简单配置文件test.conf,通过配置文件来控制debug级别,风格等。

  1. [formats]
  2. simple = "%m%n"
  3. [rules]
  4. my_cat.DEBUG >stdout;simple //将debug以上级别的信息输出到 stdout中去,格式为simple类型格式

6.编写Makefile, 文件目录如下

├── app
├── Makefile
├── test.c
├── test.conf
├── test.o
├── zlog-1.2.12
└── zlog-1.2.12.tar.gz

  1. INCS = -I./zlog-1.2./src
  2. CFLAGS = $(INCS) ./zlog-1.2./src/libzlog.a -lpthread
  3. app:test.o
  4. gcc -o app test.o $(CFLAGS)
  5. test.o:test.c
  6. gcc $(INCS) -c -o $@ $<
  7.  
  8. clean:
  9. rm test.o app

7.执行可执行文件app    ./app 结果如下:

2014-03-22 16:18:47 INFO [15456:test.c:16] hello, zlog 10, 12asfew
2014-03-22 16:18:47 DEBUG [15456:test.c:17] test aa

8.常用打印格式

  1. [formats]
  2. my = "%f:%L|%V: %m%n"
  3. [rules]
  4. my_cat.DEBUG >stdout;my

打印结果:

ser.cpp:39|INFO: hello, zlog 10, 12asfew
ser.cpp:40|DEBUG: test aa

  1. [formats]
  2. my = "%d|%f|%L|%V| %m%n"
  3. [rules]
  4. my_cat.DEBUG >stdout;my

打印结果:

2014-03-22 18:02:07|ser.cpp|39|INFO| hello, zlog 10, 12asfew
2014-03-22 18:02:07|ser.cpp|40|DEBUG| test aa

zlog 纯C日志函数库的简单使用方法的更多相关文章

  1. zlog日志函数库

    在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx).C程序员都喜欢用自己的轮子.printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件 ...

  2. C++ 调用C++写的函数库的2种方法之一(显式调用)

    一:创建C++ DLL类库,名称:Dll1 1.Dll.h _declspec(dllimport) int add(int a, int b); 2.Dll.cpp // Dll.cpp : 定义 ...

  3. jsp自定义函数库

      步骤如下: 1.创建一个函数库类,里面的方法就是标签函数库要调用的方法(必须是静态方法) package com.mdd.tag; public class JiSuan {     //两个数相 ...

  4. C++日志操作开源函数库之Google-glog

    今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge ...

  5. zlog 程序日志的库 交叉编译(Linux生成ARM库,观察执行步骤)

    1. zlog 是个很好的写程序日志的库,功能比较强大,上手快. 2. 下载地址:https://github.com/bmanojlovic/zlog 3. cd 到文件夹下,对 autogen.s ...

  6. 【神经网络与深度学习】【C/C++】C++日志操作开源函数库之Google-glog

    今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge ...

  7. 循环 与 分支语句 和 字符函数库cctype 文件简单处理

    循环 for循环 while循环 do  while循环 通常,入口条件循环比出口条件循环好,因为循环开始前对条件进行检查 c++11基于范围的for循环    对数组(或容器类,如:vector和a ...

  8. ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...

  9. 为开发者准备的 Android 函数库(2016 年版)

    转载:http://www.androidchina.net/5922.html第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人 ...

随机推荐

  1. Sencha touch 初体验

    一.什么是Sencha Touch? Sencha Touch是一个应用手持移动设备的前端js框架,与extjs是同一个门派的,它继承了extjs的优点和缺点.功能很强大,效果很炫丽,效率不高. 二. ...

  2. mysql存储过程之循环

    链接: http://www.blogjava.net/rain1102/archive/2011/05/16/350301.html

  3. C递归算法与栈的分析,非全然二叉树遍历分析---ShinePans

                 对于递归,这里面的分析最好当然是用图形的方式来分析了.这里来总结一下 1.首先对于栈的理解: 先进后出,后进先出 先进后出 2.在进行非全然二叉树的存储之后,我们要做的是对其 ...

  4. docker--caffe

    Running an official image You can run one of the automatic builds. E.g. for the CPU version: docker ...

  5. Attempting to write a row[5] in the range [0,394] that is already written to disk.

    我用POI操作excel写数据,然后就报这个错了 XSSFWorkbook workbook = new XSSFWorkbook(); SXSSFWorkbook sxssfWorkbook = n ...

  6. Android API Guides---NFC Basics

    本文档介绍了Android中运行基本任务NFC. 它说明了怎样在NDEF消息的形式发送和接收数据的NFC并介绍了支持这些功能的Andr​​oid框架的API. 对于更高级的主题.包含与非NDEF数据工 ...

  7. 多媒体开发之---h.264 SPS PPS解析源代码,C实现一以及nal分析器

    http://blog.csdn.net/mantis_1984/article/details/9465909 http://blog.csdn.net/arau_sh/article/detail ...

  8. EasyPusher直播推送中用到的缓冲区设计和丢帧原理

    问题描述 我们在开发直播过程中,会需要用到直播推送端,推送端将直播的音视频数据推送到流媒体服务器或者cdn,再由流媒体服务器/CDN进行视频的转发和分发,提供给客户端进行观看.由于直播推送端会存在于各 ...

  9. c/c++标准库中的文件操作总结

    1 stdio.h是c标准库中的标准输入输出库 2 在c++中调用的方法 直接调用即可,但是最好在函数名前面加上::,以示区分类的内部函数和c标准库函数. 3 c标准输入输出库的使用 3.1 核心结构 ...

  10. spring4.2更好的应用事件

    1.基于注解驱动事件监听器:现在可以在一个Bean的方法上使用@EventListener注解来自动注册一个ApplicationListener来匹配方法签名. @Component public ...