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

jopen 12年前
   <p><a href="/misc/goto?guid=4958336037474582756" target="_blank">zlog 1.1.1 </a>优化了好几处</p>    <ol>     <li>提高日志等级不输出的时候的判断速度</li>     <li>缓存了pid,tid的字符串形式</li>     <li>缓存了时间日期的字符串形式,增加了%D默认时间格式</li>     <li>加速了微妙、毫秒的输出速度</li>    </ol>    <p> </p>    <p>并且发现了原来1.0版为了追求速度而造成的一个问题——标准IO库带有缓存,而不同的进程写同一个文件时用的是不同的缓存,而这会导致日志交错,所以退回到采用write的系统调用来解决原子性问题。所以从表面上来看写日志的速度下降了(不过依然在我的笔记本上达到25万条日志每秒),而其他优化对CPU的压力反而降低了,现在的CPU主要耗费在等待IO上。要彻底解决这个问题很困难,需要山寨部分的标准IO库的实现……而我需要休息一阵了。</p>    <p>这是最新的 zlog使用手册:https://github.com/downloads/HardySimpson/zlog/UsersGuide-CN.pdf<br /> </p>    <p style="font-weight:bold;">zlog是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。</p>    <p>事实上,在C的世界里面没有特别好的日志函数库(就像JAVA里面的的log4j,或者C++的log4cxx)。C程序员都喜欢用自己的轮子。 printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件。syslog是个系统级别的轮子,不过速度慢,而且功能比较单调。 log4c异常坑爹(有内存泄漏、效率低等等),而且已经停止开发</p>    <p>所以我(难易)写了zlog。 </p>    <p>zlog有这些特性:</p>    <p> </p>    <p> *  syslog分类模型,基于规则路由过滤,比log4j模型要正确高效,详见<a title="为什么log4j的概念模型是错误的" href="/misc/goto?guid=4958347349039484102" target="_blank">为什么log4j的概念模型是错误的</a>。</p>    <p> *  日志格式定制,类似于log4j的pattern layout</p>    <p> *  多种输出,包括动态文件、静态文件、stdout、stderr、syslog、用户自定义输出函数</p>    <p> *  运行时手动或自动刷新配置(同时保证安全)</p>    <p> *  高性能,在我的笔记本上达到338'638条日志每秒, 大概是syslog(3)配合rsyslogd的1000倍速度 </p>    <p> *  高可靠性和速度之间的平衡,用户自定义多少条日志后fsync数据到硬盘</p>    <p> *  用户自定义等级</p>    <p> *  多线程和多进程环境下保证安全转档</p>    <p> *  精确到微秒</p>    <p> *  简单调用包装dzlog(一个程序默认只用一个分类)</p>    <p> *  MDC,线程键-值对的表,可以扩展用户自定义的字段</p>    <p> *  自诊断,可以在运行时输出zlog自己的日志和配置状态</p>    <p> *  不依赖其他库,只要是个POSIX系统就成(当然还要一个C99兼容的vsnprintf)</p>    <p></p>