• zlog 纯C日志函数库的简单使用方法


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

    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.12/src
    2 CFLAGS = $(INCS) ./zlog-1.2.12/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.常用打印格式  

    [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

  • 相关阅读:
    jquery $(document).ready() 与window.onload的区别
    Codeforces Round #540 (Div. 3) D1. Coffee and Coursework (Easy version) 【贪心】
    Codeforces Round #540 (Div. 3) C. Palindromic Matrix 【暴力】
    BZOJ 1878 [SDOI2009]HH的项链 【莫队】
    BZOJ 4028: [HEOI2015]公约数数列 【分块 + 前缀GCD】
    BZOJ 3744: Gty的妹子序列 【分块 + 树状数组 + 主席树】
    BZOJ 3289: Mato的文件管理 【莫队 + 树状数组】
    HDU 4676 Sum Of Gcd 【莫队 + 欧拉】
    POJ 1845 Sumdiv 【二分 || 逆元】
    Codeforces Round #538 (Div. 2) D. Flood Fill 【区间dp || LPS (最长回文序列)】
  • 原文地址:https://www.cnblogs.com/superPerfect/p/3617716.html
Copyright © 2020-2023  润新知