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

 #include "zlog.h"
#include <stdio.h>
int main()
{
int rc;
zlog_category_t *zc;
rc = dzlog_init("./test.conf", "my_cat");
if (rc) {
printf("init failed\n");
zlog_fini();
return -;
}
int a = ;
char str[] = "12asfew";
dzlog_info("hello, zlog %d, %s", a, str);
dzlog_debug("test aa");
zlog_fini();
return ;
}

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

 [formats]
simple = "%m%n"
[rules]
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

 INCS = -I./zlog-1.2./src
CFLAGS = $(INCS) ./zlog-1.2./src/libzlog.a -lpthread
app:test.o
gcc -o app test.o $(CFLAGS)
test.o:test.c
gcc $(INCS) -c -o $@ $< clean:
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.常用打印格式

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

打印结果:

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

[formats]
my = "%d|%f|%L|%V| %m%n"
[rules]
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

最新文章

  1. 161223、mysql锁的两个例子
  2. 通过rem编写自适应移动端要点
  3. 人人都是 DBA(II)SQL Server 元数据
  4. 前端之JavaScript第二天学习(5)-JavaScript-语句
  5. VISUAL SVN安装 及客户端使用
  6. Base64 encode/decode large file
  7. sqlserver,执行生成脚本时“引发类型为“System.OutOfMemoryException”的异常”(已解决)
  8. cform 开发框架介绍
  9. linux vi 操作
  10. JavaSE(七)之内部类
  11. Stern-Brocot Tree
  12. 高性能网络编程(1)—accept建立连接‍(转载,作者:陶辉)
  13. POJ2385——Apple Catching
  14. django - 总结 - cookie|session
  15. 日志收集(ElasticSearch)串联查询 MDC
  16. autoware
  17. Cubase独占声卡问题
  18. ubuntu 简单安装配置gitlab
  19. C# zedgraph利用另一窗口取得的串口数据绘图
  20. Flask form

热门文章

  1. vue2.0 + vux 项目搭建
  2. C/C++程序到内存分配(转)
  3. .Net 平台WebService的创建、部署和使用介绍
  4. POJ 3580(SuperMemo-Splay区间加)[template:Splay V2]
  5. JS 常用字符串操作
  6. java 定义一个同步map内存去重法
  7. 深入理解Java:注解(Annotation)自定义注解入门(转载)
  8. 【剑指Offer学习】【面试题62:序列化二叉树】
  9. Lombok引入简化Java代码
  10. mybatis学习总结(三)——增删查改