纯C日志函数库 zlog
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
logstash 是一个应用程序日志、事件的传输、处理、管理和搜索的平台。你可以用它来...
SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使...
log5j在log4j的基础上提供了几个改进,应该说是简单和实用的封装。有趣的是log5j主...
Blitz4j 是一个日志框架,基于 log4j 构建以减少多线程争用,适合高伸缩性的日志,...
Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目...
Commons Logging (JCL)提供的是一个Java 的日志接口,同时兼顾轻量级和不依赖于具体...
Google Glog 是一个C++语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助...
Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:log...
C++版的log4j,示例代码: #include