纯C日志函数库 zlog

纯C日志函数库 zlog

LGPL
C/C++ 查看源码»
跨平台
2012-03-26
难易

星星之火,可以燎原

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

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

所以我(难易)写了zlog。 

zlog有这些特性:


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

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

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

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

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

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

 *  用户自定义等级

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

 *  精确到微秒

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

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

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

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

网友提供的其他版本,方便其他平台安装

auto tools版本: https://github.com/bmanojlovic/zlog
cmake版本:https://github.com/lisongmin/zlog
windows版本: https://github.com/lopsd07/WinZlog

加载中

评论(6)

wanghuanchun
wanghuanchun
zlog保住了我的job
linux十三少
linux十三少
软件写的很好,在使用过程中有几个问题跟您交流下: 1、程序是分模块写的,能否按模块输出日志,可随时开启关闭某一功能模块日志的输出 2、打印的日志很多,我需要看某一标签对应的所有日志,如[TAG][TIME]hello word
任中楠
请问这个是异步非阻塞的吗? #zlog#
mymiss
mymiss
软件不错 比较适合程序调试时候使用,但是对于性能要求比较高的程序貌似系统占用CPU太高了 伤不起呀 zlog
summer
summer
最近用zlog
难易
难易 软件作者
zlog 1.0.3 发布,支持动态的定义每多少条文件fsync一次日志,以及定期加载配置文件 zlog

zlog 1.2.12 发布,纯 C 日志函数库

虽然我在努力开发zlog 2.0,目标为更节省内存(并合理利用缓存提高性能),但在多线程的思路上还是遇到了障碍,可以说陷入困境。 先把这段1.2 版本这几个月的bugfix发布一下。 避免了一些情况...

2013/09/25 20:29

zlog 1.2.9 发布,纯 C 日志函数库

zlog 1.2.9 是一个 bugfix 版本,完善了英文文档。 zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。 zlog有这些特性: * syslog分类模型,基于规则路由过滤,比log4j模型要正确...

2013/02/08 10:11

zlog 1.2.8 发布,纯 C 日志函数库

新年到了,开源贵在坚持,这次的更新的主要内容是 增加gcc __attribute__宏,用于gcc在编译的时候能检查zlog输出格式和参数匹配 支持配置文件一行的中间用#注释 若干小bug的修复 鉴于github不...

2013/01/03 17:41

zlog 1.2.5 发布,纯 C 日志函数库

这是一个错误修复、性能提高、降低内存使用的版本,解决了下列问题: 保证在单个线程退出的时候自动删除缓存(而不是等到zlog_fini才释放), 用atexit来注册函数解决主线程退出的问题。这样,...

2012/11/15 19:53

zlog 1.2.3 发布,纯 C 日志函数库

zlog 1.2.3 发布,这是一个bugfix 版本。zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。 zlog 主要特性: * syslog分类模型,基于规则路由过滤,比log4j模型要正确高效,详见...

2012/10/01 06:52

zlog 1.2.0 发布,纯C日志函数库

自从zlog 1.1 版发布以来,受到了不少关注和建议。在git上的下载数量也非常高 经过长时间的深思熟虑,我在zlog内增加了这些功能,发布 zlog 1.2.0版 : (a) 对管道的支持,从此zlog可以外接c...

2012/08/08 10:54

zlog 1.1.1 发布,纯C日志函数库

zlog 1.1.1 优化了好几处 提高日志等级不输出的时候的判断速度 缓存了pid,tid的字符串形式 缓存了时间日期的字符串形式,增加了%D默认时间格式 加速了微妙、毫秒的输出速度 并且发现了原来1...

2012/07/09 08:46

zlog 1.0.7 发布,纯C日志函数库

zlog是一个高可靠,高性能、线程安全、灵活、概念清晰的纯C日志函数库。 一开始打算把strftime,也就是从测试上来看耗费cpu最多的调用,自己写函数替代。可惜的是,写完后发觉vfprintf消耗增...

2012/06/19 09:35

zlog 1.0.6 发布,纯C日志函数库

再次感谢[nikuailema at gmail.com],找到了zlog的另一个瓶颈。 在我的开发环境下 ------------------------------------------------- v1.0.6 $ time ./test_press_zlog 1 10 100000 real ...

2012/06/15 10:16

zlog 1.0.4 发布,纯 C 日志函数库

zlog 1.0.4发布了,感谢[nikuailema at gmail.com],该版本在初始化时缓存了静态日志文件的FILE *fp,将写静态日志文件的效率提高了3倍左右。 zlog是一个高可靠,高性能、线程安全、灵活、概...

2012/06/14 09:06

没有更多内容

加载失败,请刷新页面

1
回答
zlog在嵌入式板子上用占用内存过大的问题

@难易 你好,想跟你请教个问题:我在嵌入式开发板上使用zlog库,目前开发板只有128M内存, 可能有10个进程左右在运行,但是目前内存比较紧张,使用zl...

05/25 17:25
3
回答
在多线程中使用 zlog 的 mdc 功能是否需要在每个线程都调用 zlog_put_mdc ??

@难易 老师: 你好,想跟你请教个问题: 因为项目的需求,需要每个进程将日志输出到单独的日志文件,本来想用syslog的,但是没看到要怎么实现这个功能。后...

2016/09/18 15:09
2
回答
zlog使用变量创建文件

@难易 你好,想跟你请教个问题: 在zlog中,我想使用变量来命名并生成一个文件,,比如,int a=10,希望得到10.log,,我现在不知道如何在配置...

2016/07/22 16:45
7
回答
zlog日志打印时间有些乱序

您好! zlog会出现下面的情况:时间上好像有些乱序,请问是什么原因? 是否是因为小弟没有设置相关参数:

2012/08/24 14:34
3
回答
多线程使用zlog偶尔会发生core dump

@难易 你好,想跟你请教个问题: 项目中使用到了你的zlog 1.2.12版本(目前最新版本了吧),我们的项目使用是线程池并发处理,测试的时候偶尔会出现c...

2016/01/08 10:56
1
回答
zlog和winzlog代码不一致,如何跨平台?

难易,你好!我下载了zlog最新的代码,同时也下载了winzlog的代码,发现很多的实现不一致。所以,我有如下的问题: 1、我希望使用一个跨平台的日志库,...

2015/06/10 22:49
4
回答
VS2010使用zlog报错问题(write fail, errno[0])

@难易 你好,想跟你请教个问题: 我在windows下使用你的zlog时,报错,不能像正常测试那样输出正确的结果,errlog报错信息如下 12-18 1...

2014/12/18 13:09
1
回答
你好,我那个vs2010的写入问题解决了,但是现在,我迁移到vs2008时,打印的结果全是双的

@难易 你好,想跟你请教个问题: 结果都是这样 2014-12-18 20:58:23.429000 ERROR 7080:10883624:f:\des...

2014/12/18 21:06
2
回答
动态日志文件输出时效率问题

@难易 你好,想跟你请教个问题: 动态日志文件输出时,能否改为不每次都close(fd),现在测试发现,采用动态日志文件输出,效率很慢

2014/08/27 12:55
2
回答
zlog有移植到ARM上的吗?

@难易 你好,想跟你请教个问题: 请问有zlog有移植到ARM版的历程不?

2014/07/01 09:52

没有更多内容

加载失败,请刷新页面

纯C日志函数库--zlog上手指南

zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。作者编写的初衷是因为log4c不给力,而log4j、log4cxx等log4系列的日志函数库在概念上不正确。zlog继承了unix操作系统中syslog的...

2012/03/29 15:57
7.6K
3
闭包javascript

闭包 : 内部函数可以访问该函数外的变量和函数称为闭包! 最基本的例子: ``` var value = "闭包"; function fn(){ zlog(value);//闭包 //内部访问外部的变量 } fn(); ``` ``` 再稍微复杂点...

2016/11/16 10:43
0
0
php 按日期格式保存日志到本地服务器

``` public static function zlog($data) { $path = ROOT_PATH . '/data/logs/' . date("Y-m"); if (!is_dir($path)) mkdir($path); $filename = $path . '/' . date("d") . '.log'; $info_t...

03/12 10:46
10
0
zlog()只是我用函数封装了console.log()因为用的次数太多改短一点!

zlog()只是我用函数封装了console.log()因为用的次数太多改短一点! 莫怪! ``` function zlog(){ try{ console.log.apply(console, arguments); } catch(e){ try{ opera.postError.apply(...

2016/11/18 10:04
52
0
call()/apply()

MDN快速通道 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call **call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含...

2016/11/18 09:52
2
0
字符串中查找字符

字符串中查找字符

2014/09/22 10:22
77
0
为什么log4j的概念模型是错的--zlog的模型简介

假设你的log4j系统中有这样的配置 log4j.logger.aa=ERROR, A1 log4j.logger.aa.bb= log4j.logger.aa.cc=INFO aa是一个父logger。aa.bb和aa.cc是aa的子logger。 aa.bb继承了aa's等级和输出(ap...

2012/04/11 20:18
4K
0
对linux的IO的再认识

呃,其实我对linux的IO感兴趣主要的动力是为了让zlog写日志文件更快一点。虽然zlog是个用户态的函数库,但为了提升速度,必须对linux底层的机制有一定的了解。 OK,言归正传,从我的各个阶段...

2013/05/29 09:01
4.2K
2
嵌入式开发调试方法

在嵌入式项目的开发中,受限于资源和工具,对程序的调试往往没有PC环境下的那么容易和轻松。而在嵌入式开发中,因为设备和环境的多样性、复杂性更易遇到各种奇怪的问题,这就产生了一个矛盾。...

2013/12/02 22:40
1K
1
自己动手写一个印钞机 第四章

非均衡胜负收益带来的必然非均衡胜负比例,目标由因子的能力解决一部分,模式识别提升关键的一部分

2016/10/26 22:38
39
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部