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
#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
zlog 纯C日志函数库的简单使用方法的更多相关文章
- zlog日志函数库
在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx).C程序员都喜欢用自己的轮子.printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件 ...
- C++ 调用C++写的函数库的2种方法之一(显式调用)
一:创建C++ DLL类库,名称:Dll1 1.Dll.h _declspec(dllimport) int add(int a, int b); 2.Dll.cpp // Dll.cpp : 定义 ...
- jsp自定义函数库
步骤如下: 1.创建一个函数库类,里面的方法就是标签函数库要调用的方法(必须是静态方法) package com.mdd.tag; public class JiSuan { //两个数相 ...
- C++日志操作开源函数库之Google-glog
今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge ...
- zlog 程序日志的库 交叉编译(Linux生成ARM库,观察执行步骤)
1. zlog 是个很好的写程序日志的库,功能比较强大,上手快. 2. 下载地址:https://github.com/bmanojlovic/zlog 3. cd 到文件夹下,对 autogen.s ...
- 【神经网络与深度学习】【C/C++】C++日志操作开源函数库之Google-glog
今天想给我的C++项目找一个开源的日志类,用于记录系统日志,结果浪费了半个下午的时间.从网上搜索相关资料,找到以下几个备选方案: 1.log4cplus 下载地址:http://sourceforge ...
- 循环 与 分支语句 和 字符函数库cctype 文件简单处理
循环 for循环 while循环 do while循环 通常,入口条件循环比出口条件循环好,因为循环开始前对条件进行检查 c++11基于范围的for循环 对数组(或容器类,如:vector和a ...
- ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...
- 为开发者准备的 Android 函数库(2016 年版)
转载:http://www.androidchina.net/5922.html第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人 ...
随机推荐
- Objective-C中单例
单例模式,由于其简单好用容易理解.同时在出问题时也容易定位的特点,在开发中经常用到的一个设计模式. 一般在程序中,经常调用的类,如工具类.公共跳转类等,我都会采用单例模式 这个写法是苹果推荐的写法 ...
- CrtmpServer 接收推送视频流 注册流基本流程
今天研究了CrtmpServer 将客户端推动过来的视频流注册到服务的流程,记录下来,以备后用. 图1 注册前端视频流流程
- 用户'sa'登录失败(错误18456)解决方案图解
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://thenear.blog.51cto.com/4686262/865544 htt ...
- 不能hadoop-daemon.sh start datanode, 显示 错误: 找不到或无法加载主类 ”-Djava.library.path=.home.hadoop.apps.hadoop-2.6.4.lib”
这两行代码是用来解决一个Hadoop,32位和64位不兼容的警告的,(这个警告可以忽略) 这两行加到mini2~min4后, export HADOOP_COMMON_LIB_NATIVE_DIR=$ ...
- maven命令学习-发布上传jar包-deploy
Maven学习六之利用mvn deploy命令上传包 转http://blog.csdn.net/woshixuye/article/details/8133050 mvn:deploy在整合或者发布 ...
- wmware搬家
由于D盘空间不足D:\Users\Documents\Virtual Machines文件夹剪切至E:\Virtual Machines. 先关闭虚拟机 然后剪切 直接通过icon无法打开 先运行E: ...
- fabric-ca安装
1.Go版本1.7+(具体可参考Linux安装Go语言) 2.GOPATH环境变量正确配置 export GOROOT=/usr/local/go export GOPATH=/opt/gopath ...
- 提高sqlite 的运行性能(转载)
原文地址: https://blog.devart.com/increasing-sqlite-performance.html One the major issues a developer en ...
- tomcat部署web应用的4种方法以及部署多个应用
原文: tomcat部署web应用的4种方法 在Tomcat中有四种部署Web应用的方式,简要的概括分别是: (1)利用Tomcat自动部署 (2)利用控制台进行部署 (3)增加自定义的Web部署文件 ...
- exp/imp三种模式——完全、用户、表
ORACLE数据库有两类备份方法.第一类为物理备份,该方法实现数据库的完整恢复,但数据库必须运行在归挡模式下(业务数据库在非归挡模式下运行),且需要极大的外部存储设备,例如磁带库:第二类备份方式为逻辑 ...