zlog 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
zlog 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
zlog 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !

软件简介

星星之火,可以燎原

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

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (7)

加载中
该评论暂时无法显示,详情咨询 QQ 群:912889742
打分: 力荐
zlog保住了我的job
2018/09/30 17:56
回复
举报
软件写的很好,在使用过程中有几个问题跟您交流下: 1、程序是分模块写的,能否按模块输出日志,可随时开启关闭某一功能模块日志的输出 2、打印的日志很多,我需要看某一标签对应的所有日志,如[TAG][TIME]hello word
2017/12/29 09:21
回复
举报
难易软件作者
zlog 1.0.3 发布,支持动态的定义每多少条文件fsync一次日志,以及定期加载配置文件 zlog
2012/06/06 19:54
回复
举报
最近用zlog
2013/04/18 17:07
回复
举报
软件不错 比较适合程序调试时候使用,但是对于性能要求比较高的程序貌似系统占用CPU太高了 伤不起呀 zlog
2013/12/23 14:40
回复
举报
请问这个是异步非阻塞的吗? #zlog#
2016/06/21 22:36
回复
举报
更多评论
发表了资讯
2013/09/25 00:00

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

虽然我在努力开发zlog 2.0,目标为更节省内存(并合理利用缓存提高性能),但在多线程的思路上还是遇到了障碍,可以说陷入困境。 先把这段1.2 版本这几个月的bugfix发布一下。 避免了一些情况下会出现Segmentation fault。 功能上有一点小改变: 一个网友给我提交了一段代码,当日志输出到一个固定的文件的时候,当外部的程序重命名或者删除原文件后,日志库会自动重新生成日志。借鉴了python的WatchedFileHandler。非常感谢。...

4
9
发表了资讯
2013/02/08 00:00

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

zlog 1.2.9 是一个 bugfix 版本,完善了英文文档。 zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。 zlog有这些特性: * syslog分类模型,基于规则路由过滤,比log4j模型要正确高效,详见为什么log4j的概念模型是错误的。 * 日志格式定制,类似于log4j的pattern layout * 多种输出,包括动态文件、静态文件、stdout、stderr、syslog、用户自定义输出函数 * 运行时手动或自动刷新配置(同时保证安全) * 高性能,在...

3
17
发表了资讯
2013/01/03 00:00

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

新年到了,开源贵在坚持,这次的更新的主要内容是 增加gcc __attribute__宏,用于gcc在编译的时候能检查zlog输出格式和参数匹配 支持配置文件一行的中间用#注释 若干小bug的修复 鉴于github不再提供下载页面,只能从版本库下载,修改一些文档的链接 另外,很高兴看到有网友提供了适合其他平台安装的zlog版本,非常感谢! auto tools版本: https://github.com/bmanojlovic/zlog cmake版本: https://github.com/lisongmin/zlog w...

3
22
发表了资讯
2012/11/15 00:00

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

这是一个错误修复、性能提高、降低内存使用的版本,解决了下列问题: 保证在单个线程退出的时候自动删除缓存(而不是等到zlog_fini才释放), 用atexit来注册函数解决主线程退出的问题。这样,即使大规模的创建销毁线程,zlog依然可以把缓存大小控制住,和存活的线程数量成线性比例。 缓存所有的时间字符串,保证所有的%d在strftime的时候都能每秒缓存,达到和原先%D一样的速度,这样无论在配置中用了多少%d的时间串,都能保证最...

2
13
发表了资讯
2012/10/01 00:00

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

zlog 1.2.3 发布,这是一个bugfix 版本。zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。 zlog 主要特性: * syslog分类模型,基于规则路由过滤,比log4j模型要正确高效,详见为什么log4j的概念模型是错误的。 * 日志格式定制,类似于log4j的pattern layout * 多种输出,包括动态文件、静态文件、stdout、stderr、syslog、用户自定义输出函数 * 运行时手动或自动刷新配置(同时保证安全) * 高性能,在我的笔记本...

0
11
发表了资讯
2012/08/08 00:00

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

自从zlog 1.1 版发布以来,受到了不少关注和建议。在git上的下载数量也非常高 经过长时间的深思熟虑,我在zlog内增加了这些功能,发布 zlog 1.2.0版 : (a) 对管道的支持,从此zlog可以外接cronolog这样的日志过滤程序来输出 (b) 全面的日志转档支持,详见http://hardysimpson.github.com/zlog/UsersGuide-CN.html#htoc26 (c) 其他兼容性的代码改动 zlog 1.2 在库方面是和zlog 1.0/1.1二进制兼容的,区别在于: (a) 所有的宏改为...

3
7
发表了资讯
2012/07/09 00:00

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

zlog 1.1.1 优化了好几处 提高日志等级不输出的时候的判断速度 缓存了pid,tid的字符串形式 缓存了时间日期的字符串形式,增加了%D默认时间格式 加速了微妙、毫秒的输出速度 并且发现了原来1.0版为了追求速度而造成的一个问题——标准IO库带有缓存,而不同的进程写同一个文件时用的是不同的缓存,而这会导致日志交错,所以退回到采用write的系统调用来解决原子性问题。所以从表面上来看写日志的速度下降了(不过依然在我的笔记本...

7
11
发表了资讯
2012/06/19 00:00

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

zlog是一个高可靠,高性能、线程安全、灵活、概念清晰的纯C日志函数库。 一开始打算把strftime,也就是从测试上来看耗费cpu最多的调用,自己写函数替代。可惜的是,写完后发觉vfprintf消耗增大,最后反而不如直接用strftime,看来拼性能是不如GNU那批大爷阿。 言归正传,1.0.7版在功能上只改动一个一处,就是把线程号%t的显示改为16进制,节省点地方。还有一些文档上的、编译选项上的优化。程序做了一些优化,在callgrind的测试...

8
4
发表了资讯
2012/06/15 00:00

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

再次感谢[nikuailema at gmail.com],找到了zlog的另一个瓶颈。 在我的开发环境下 ------------------------------------------------- v1.0.6 $ time ./test_press_zlog 1 10 100000 real 0m1.814s user 0m3.060s sys 0m0.270s ------------------------------------------------- v1.0.5 $ time ./test_press_zlog 1 10 100000 real 0m2.779s user 0m4.170s sys 0m0.560s 可以看到速度提升了1倍不到点。...

3
6
发表了资讯
2012/06/14 00:00

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

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

3
8
发表了资讯
2012/06/06 00:00

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

zlog 1.0.3 发布了,该版本支持动态的定义每多少条文件fsync一次日志,以及定期加载配置文件。 zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。

1
10
发表了资讯
2012/06/01 00:00

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

在经过2个月的思考、相亲、考试、发呆、编码之后,zlog于儿童节发布1.0.0版!(代码规模也从7千行到了8千行) 首先祝大家儿童节快乐! 1.0.0版提供了如下新的特性 大幅改写了不少组件初始化和重载的代码,最终使得重载日志配置zlog_reload()成为原子性的操作!如果失败将会回滚到上一次的正确配置 配置文件的布局和格式改变了,分成几节,更加清晰易懂 在编译器支持的情况下,能打印日志发生在哪个函数内,来源于__func__或者__F...

0
8
发表了资讯
2012/04/09 00:00

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

相对于zlog 0.9.0,本次发布只修改了一个接口函数的命名,即zlog_update改名为zlog_reload,把API稳定下来。 zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。作者编写的初衷是因为log4c不给力,而log4j、log4cxx等log4系列的日志函数库在概念上不正确。zlog继承了unix操作系统中syslog的伟大传统,将日志系统的分类、级别、输出方向、输出格式完全解耦。废话不多说,这个是上手指南 这个函数库在我目前的工作环境...

0
10
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2012/04/11 20:18

为什么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等级和输出(appender),等级是ERROR,输出是A1。 aa.cc继承并覆盖了aa的级别。所以aa.cc的等级是INFO输出还是A1。 需求1:如果我现在想把所有的aa的日志,所有的级别,输出到一个特别的文件里面去,并保持原来的aa.bb、aa.cc的输出不变,如何实现? 需...

21
19
发表于大前端专区
2016/11/18 10:04

zlog()只是我用函数封装了console.log()因为用的次数太多改短一点!

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

0
0
发表于大前端专区
2016/11/16 10:43

闭包javascript

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

0
0
发表于软件架构专区
2018/03/12 10:46

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_text = '[' . date('Y-m-d H:i:s') . '] '; if (is_array($data) || is_object($data)) $info_text .= var_export($data, TRUE); else $info_text .= $data; error_log($info_text . "\r\n", 3, $filename); } ``` ps: 调用 // self::zlo...

0
1
发表了博客
2014/09/22 10:22

字符串中查找字符

0:字符串中不包含字符c; >0 包含字符c. int str_search(char *cstr,char c) { int irs = 0; char *cp = cstr; zlog_debug(fzs,"cp=%s",cp); zlog_debug(fzs,"c=%c",c); while(*cp != 0) { if(*cp==c) { irs++; } cp++; } cp = NULL; return irs; }...

0
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2012/03/29 16:18

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

zlog是个概念清晰的日志函数库,在效率、功能、安全性上大大超过了log4c,并且是用c写成的,具有比较好的通用性 1.安装 下载 HardySimpson-zlog-c7ae17b.zip 解压, 安装 1 $ unzip HardySimpson-zlog-c7ae17b.zip 2 $ cd HardySimpson-zlog-c7ae17b/ 3 $ ./configure --enable-test # 把测试程序和案例也编译下,反正不安装 4 $ make 5 $ make install 6 # 默认安装在/usr/local/下,包括libzlog.so和zlog.h 把测试程序和案例也...

24
10
发表了问答
2012/06/04 13:39

非root用户zlog_init 失败

@难易 你好,想跟你请教个问题: 我最近在用zlog, 安装之后,在测试时,总是init失败。切换用户为root后,才能成功。请问这是为什么呢?

4
0
发表于软件架构专区
2018/05/25 17:25

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

@难易 你好,想跟你请教个问题:我在嵌入式开发板上使用zlog库,目前开发板只有128M内存, 可能有10个进程左右在运行,但是目前内存比较紧张,使用zlog的过程中,发现每一个进程初始化一次就得多占用1M内存。麻烦问一下有办法降低内存的占用量吗?能够通过配置文件进行更改

1
0
2016/09/18 15:09

在多线程中使用 zlog 的 mdc 功能是否需要在每个线程都调用 zlog_put_mdc ??

@难易 老师: 你好,想跟你请教个问题: 因为项目的需求,需要每个进程将日志输出到单独的日志文件,本来想用syslog的,但是没看到要怎么实现这个功能。后来看到了难易老师的 zlog 有 mdc 这个功能,感觉应该能实现需求的,但是 zlog 使用手册中提到"MDC是每个线程独有的“,我在使用过程中也确实发现单个线程中设置的 mdc 只能给这个线程用,其他的线程会提示找不到 key 。 所以,现在想问一个问题:在多线程中使用 zlog 的 md...

4
0
发表了问答
2016/07/22 16:45

zlog使用变量创建文件

@难易 你好,想跟你请教个问题: 在zlog中,我想使用变量来命名并生成一个文件,,比如,int a=10,希望得到10.log,,我现在不知道如何在配置文件中修改规则,,但是找了网上很多资料,没有找到关于这方面的方法,,请您详细讲解一下好吗,谢谢。

2
0
发表了问答
2012/08/24 14:34

zlog日志打印时间有些乱序

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

12
0
发表了问答
2016/01/08 10:56

多线程使用zlog偶尔会发生core dump

@难易 你好,想跟你请教个问题: 项目中使用到了你的zlog 1.2.12版本(目前最新版本了吧),我们的项目使用是线程池并发处理,测试的时候偶尔会出现core dump的情况,core dump原因主要是使用了dzlog函数打印了十六进制,不知道与这个有没有关系,跟踪core文件如下: #0 0x00007f6db3cef9c1 in vfprintf () from /lib64/libc.so.6 #1 0x00007f6db3d1a079 in vsnprintf () from /lib64/libc.so.6 #2 0x00007f6db6a775c9 in z...

4
0
发表了问答
2015/06/10 22:49

zlog和winzlog代码不一致,如何跨平台?

难易,你好!我下载了zlog最新的代码,同时也下载了winzlog的代码,发现很多的实现不一致。所以,我有如下的问题: 1、我希望使用一个跨平台的日志库,也就是说windows和linux下都可以是一套代码,那么,我是使用zlog还是winzlog呢? 2、我自己写了一个日志库,但是在多线程调用的时候,日志很乱,经常在一个业务的日志中,还穿插其他业务的日志,导致分析问题很困难,那么,zlog或winzlog有没有这样的问题呢?...

1
0
发表了问答
2014/12/18 13:09

VS2010使用zlog报错问题(write fail, errno[0])

@难易 你好,想跟你请教个问题: 我在windows下使用你的zlog时,报错,不能像正常测试那样输出正确的结果,errlog报错信息如下 12-18 11:27:29 ERROR (336:e:\winzlog-master\zlog\src\rotater.c:158) opened 12-18 11:27:29 ERROR (336:e:\winzlog-master\zlog\src\rule.c:445) write fail, errno[0] 12-18 11:27:29 ERROR (336:e:\winzlog-master\zlog\src\zlog.c:985) zlog_output fail, srcfile[e:\winzlog-master\zlog\tes...

6
0
发表了问答
2014/12/18 21:06

你好,我那个vs2010的写入问题解决了,但是现在,我迁移到vs2008时,打印的结果全是双的

@难易 你好,想跟你请教个问题: 结果都是这样 2014-12-18 20:58:23.429000 ERROR 7080:10883624:f:\desex\desex\win32dialogbasedapplication.cpp:15 hehe 2014-12-18 20:58:23.429000 ERROR 7080:10883624:f:\desex\desex\win32dialogbasedapplication.cpp:15 hehe 2014-12-18 21:00:15.130000 INFO 12136:1970728:f:\desex\desex\public.cpp:159 hello zlog. 2014-12-18 21:00:15.130000 INFO 12136:1970728:f:\desex\desex...

5
0
发表了问答
2014/08/27 12:55

动态日志文件输出时效率问题

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

4
0
发表了问答
2014/07/01 09:52

zlog有移植到ARM上的吗?

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

4
0
发表了问答
2014/06/04 11:08

zlog现在是停止更新了?

@难易 你好,想跟你请教个问题:zlog现在是停止更新了?

1
0
发表了问答
2014/03/25 16:47

为什么多线程的zlog比log4c要慢?

@难易 你好,想跟你请教个问题:如果需要细节,可以描述大概的应用场景...公司在决定用不用zlog,有时间回复一下。谢谢。

1
1
发表了问答
2012/04/28 14:01

zlog的下载超过250,但没有人提问题给我……

也没有人给我写邮件,真是寂寞阿。。。 一种可能是我这个软件写的太好了,以至于大家都没什么问题。 还有一种可能是这个软件不符合大多人的需求,用起来太复杂或者怎么样。 不管如何,我要继续前进,继续优化、推广我的软件。 目前的想法是: 改变配置文件的布局,去掉@ &这种符号,改用[global],[format]这样的形式来。 reload失败不破坏原有配置,继续按原来的做 试着把manpage写出来,虽然我还不知道怎么写?有人知道怎么写u...

33
0
发表了问答
2014/03/22 18:36

根据不同级别(debug\error\info\trace)的信息对应不同的颜色

@难易 你好,想跟你请教个问题: 使用zlog时,secureCRT等终端工具是否可以根据debug级别输出对应颜色? 比如error是红色,info是绿色,方便查找问题

4
0
发表了问答
2014/02/27 09:08

zlog内容能否组织出syslog格式的文本

不知如何组织出类似syslog一样的日志格式,比如:<134>Feb 26 10:43:31 192.168.1.1 test[12221]: test ok 能否增加一些类似syslog-ng里面的宏定义,比如PRI类似格式的数据

2
0
发表了问答
2013/11/21 15:47

测试zlog写入速度,对短日志不利

zlog使用手册提到25万条日志每秒的速度,我实测了一下,结果比标称还要好,可以达到50万条每秒。 这个速度和单条日志长度无关,我尝试了32字节、64字节、和128字节的日志长度,发现都在50万条每秒左右。这样短日志的吞吐量就不如长日志。我猜测这是磁盘IO次数所限?zlog有没有手段缓存日志来减少IO次数(例如,每2M写一次磁盘),从而提升短日志的吞吐量? 我看到有buffer min和buffer max的设置,但手册提到这是为单条日志设计...

4
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
7 评论
230 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部