zlog 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
zlog 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票

软件简介

星星之火,可以燎原

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 指数为
超过 的项目

评论 (6)

加载中
打分: 力荐
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。 功能上有一点小改变: 一个网友给我提交了一段代码,当日志输出到一个固定的文件的时候,当外部的...

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 * 多种输出,包括动态文件、静态文件...

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

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

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

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

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

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

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、...

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#htoc...

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

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

zlog 1.1.1 优化了好几处 提高日志等级不输出的时候的判断速度 缓存了pid,tid的字符串形式 缓存了时间日期的字符串形式,增加了%D默认时间格式 加速了微妙、毫秒的输出速度 并且发现了原来1.0版为了追求速度而造成的一个问题——标准IO库带有缓存,而不同的进程写同一个文件时用的是不同的缓存,而这会导致日志交错,所以...

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

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

zlog是一个高可靠,高性能、线程安全、灵活、概念清晰的纯C日志函数库。 一开始打算把strftime,也就是从测试上来看耗费cpu最多的调用,自己写函数替代。可惜的是,写完后发觉vfprintf消耗增大,最后反而不如直接用strftime,看来拼性能是不如GNU那批大爷阿。 言归正传,1.0.7版在功能上只改动一个一处,就是把线程号%t的...

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_pre...

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()成为原子性的操作!如果失败将会回滚到上一次的正确配置 配置文件的布局和格式改...

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
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2018/08/16 11:48

zlog使用手册

zlog使用手册 来源 http://hardysimpson.github.io/zlog/UsersGuide-CN.html Contents Chapter 1 zlog是什么? 1.1 兼容性说明 1.2 zlog 1.2 发布说明 Chapter 2 zlog不是什么? Chapter 3 Hello World 3.1 编译和安装zlog 3.2 应用程序调用和链接zlog 3.3 Hello World 代码 3.4 更简单的Hello World Chapter 4 Syslog ...

0
1
发表于软件架构专区
2012/03/29 15:57

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

zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。作者编写的初衷是因为log4c不给力,而log4j、log4cxx等log4系列的日志函数库在概念上不正确。zlog继承了unix操作系统中syslog的伟大传统,将日志系统的分类、级别、输出方向、输出格式完全解耦。 1.安装 下载 https://github.com/downloads/HardySimpson/zl...

98
19
发表了博客
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:如果我现在想把所有的...

21
19
发表于硬件 & IoT专区
2019/01/22 16:44

高效c/c++日志工具zlog使用介绍

1. zlog简介 zlog的资料网上很多,这里不在详细说明;zlog是用c写的一个日志工具,非常小,而且高效,可以同时向控制台和文件中输出,日志接口与printf使用基本一样,所以使用起来很简单。 感觉唯一的缺点是配置稍...

0
0
发表于大前端专区
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(){ zlo...

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); ...

0
1
发表于大前端专区
2016/11/18 09:52

call()/apply()

MDN快速通道 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call **call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组。** 1.在回调中强制指定函数上下文 ``` function forEach( lists, callback ){ for( var n = 0; n < lists.lengt...

0
0
发表了博客
2019/04/10 10:10

Android Debug 之 Log 最佳实践

本文微信公众号「AndroidTraveler」首发。 背景 在开发过程中,调试是必不可少的一项工作。 当我们要确定项目的逻辑时,当我们要了解界面的生命周期时,当我们发现新写的逻辑与期望效果不一致时,当我们觉得数据有问题时...... 而调试有两种方式: 第一种就是使用 debug 模式运行 APP,然后通过断点让程序运行到指定位置...

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

字符串中查找字符

字符串中查找字符

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 # 把测试程序和案例也编译下,反正不安...

21
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是每个线程独有的“,我在使用过程中也确实发现单个线程中设置的 ...

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

zlog使用变量创建文件

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

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

zlog日志打印时间有些乱序

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

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

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

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

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

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

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

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 ER...

4
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:...

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

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

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

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

zlog有移植到ARM上的吗?

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

2
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]这样的形式来。...

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

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

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

3
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/01/07 19:43

windows版本zlog文件转存问题

windows 版本 zlog 在设置文件 rolling 给定一个文件大小之后, 文件在转存时候会发生错误, 错误指向 MSVCR100.dll 。 我使用配置 my_cat.DEBUG "d:\\tsMMM.%d(%Y%m%d).log" , 1MB * 0 ~ "d:\\tsMM.log.#1r"; 其中在 如果后面只是 #r 也会发生错误。 我初步定位在 rorater.c 445行 sscanf ,nread没赋值。...

6
0
发表了问答
2013/11/28 14:27

日志路径动态?自动创建?

难易大哥,建议是不是可以增加下面的功能: 日志路径也可动态,路径不存在可自动创建。 我目前用的情况是,如果使用不存在的路径,日志就生成不了。

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

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

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

4
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
6 评论
230 收藏
分享
返回顶部
顶部