事实上,在C的世界里面没有特别好的日志函数库(就像Java里面的的log4j,或者C++的log4cxx)。C程序员都喜欢用自己的轮子。printf就是个挺好的轮子,但没办法通过配置改变日志的格式或者输出文件。syslog是个系统级别的轮子,不过速度慢,而且功能比较单调。

尝试了几种C/C++ log库,简单记录如下:

log4j的衍生品


日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录,他有很多移植版(包括官方的和非官方的版本)

log4cxx


地址 http://logging.apache.org/log4cxx/

Log4cxx是开放源代码项目Apache Logging Service的子项目之一,是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计。

Log4cpp


log4cpp是个基于LGPL的开源项目,移植自Java的日志处理跟踪项目log4j,并保持了API上的一致。其类似的支持库还包括Java(log4j),C++(log4cpp、log4cplus),C(log4c),Python(log4p)等。 
log4c ,

log4c

log4c现已不再有人维护了。不是面向对象的,不支持流式log输入。有配置文件。最新版本(log4c-1.2.4.tar.gz)存在内存泄露。不建议使用。

log4cplus

地址 http://sourceforge.net/projects/log4cplus/

log4cplus是C++编写的开源的日志系统,前身是java编写的log4j系统.受Apache Software License保护。

作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、 
NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份等等。

google glog


Google glog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例:

LOG(INFO) << “Found ” << num_cookies << ” cookies”;

LOG”宏为日志输出关键字,“INFO”为严重性程度。 
主要支持功能:

1, 参数设置,以命令行参数的方式设置标志参数来控制日志记录行为; 
2, 严重性分级,根据日志严重性分级记录日志; 
3, 可有条件地记录日志信息; 
4, 条件中止程序。丰富的条件判定宏,可预设程序终止条件; 
5, 异常信号处理。程序异常情况,可自定义异常处理过程; 
6, 支持debug功能。可只用于debug模式; 
7, 自定义日志信息; 
8, 线程安全日志记录方式; 
9, 系统级日志记录; 
10, google perror风格日志信息; 
11, 精简日志字符串信息。

z-log


地址 https://github.com/HardySimpson/zlog

z-log是一个高性能、线程安全、灵活、概念清晰的纯C日志函数库。 
难易编写

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

spdlog


spdlog 是一个快速的 C++ 日志库,只包含头文件,兼容 C++11。

特性:

  • 非常快
  • 只包含头文件
  • 无需依赖第三方库
  • 支持跨平台 - Linux / Windows on 32/64 bits
  • 支持多线程
  • 可对日志文件进行循环输出
  • 可每日生成日志文件
  • 支持控制台日志输出
  • 可选的异步日志
  • 支持日志输出级别
  • 可自定义日志格式

c-log


c-log是一个稳定,高效,多线程安全,易用,简单的C/C++ 日志库,在github主页上有丰富的测试case,后续将会推迟直接输出到scribe等集中式日志收集中间件上,帮助用户更好的收集,分析日志

syslog-ng


syslog-ng作为syslog的替代工具,可以完全替代syslog的服务,并且通过定义规则,实现更好的过滤功能 
的一个设计原则就是建立更好的消息过滤粒度。syslog-ng能够进行基于内容和优先权/facility的过滤。另一个设计原则是更容易进行不同防火墙网段的信息转发,它支持主机链,即使日志消息经过了许多计算机的转发,也可以找出原发主机地址和整个转发链。最后的一个设计原则就是尽量使配置文件强大和简洁。

转载:http://blog.csdn.net/gatieme/article/details/50603682

C/C++log日志库比较的更多相关文章

  1. [go]日志库小例子

    输出日志 //输出日志到console msg := fmt.Sprintf(format, args...) //format里的坑 args解出的数据相匹配 fmt.Fprintf(os.Stdo ...

  2. SQLServer某个库log日志过大,无法收缩日志文件 ,因为该文件结尾的逻辑日志文件正在使用

    问题描述: 今天看到user库日志备份方面很久,然后查看到user库这个log日志很大 图片是我已经解决了,然后现在可以收缩的大小 解决方法: 1.先备份user库日志,因为很大,所以要等很久,这个只 ...

  3. C++ 日志库 boost::log 以及 glog 的对比

    日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.本文将从设计上和功能上对比 C++ 语言常见的两款日志库: boost::log 和 google-glog . 设计 b ...

  4. GO的日志库log竟然这么简单!

    前言 最近在尝试阅读字节开源RPC框架Kitex的源码,看到日志库klog部分,果不其然在Go原生的log库的基础上增加了自己的设计,大体包括增加了一些格式化的输出.增加一些常用的日志级别等. 一番了 ...

  5. 爆料喽!!!开源日志库Logger的剖析分析

    导读 Logger类提供了多种方法来处理日志活动.上一篇介绍了开源日志库Logger的使用,今天我主要来分析Logger实现的原理. 库的整体架构图 详细剖析 我们从使用的角度来对Logger库抽茧剥 ...

  6. 爆料喽!!!开源日志库Logger的使用秘籍

    日志对于开发来说是非常重要的,不管是调试数据查看.bug问题追踪定位.数据信息收集统计,日常工作运行维护等等,都大量的使用到.今天介绍著名开源日志库Logger的使用,库的地址:https://git ...

  7. 开源日志库log4cplus+VS2008使用

    一.简介     log4cplus是C++编写的开源的日志系统,功能非常全面.本文介绍如何在Windows+VS2008中使用该日志库.   二.下载     可从网站[url]http://log ...

  8. 这可能是php世界中最好的日志库——monolog

    由于一些历史原因,php中并没有内建的日志接口,故长期以来也没一个功能完备并且应用广泛的日志库.在我的工作生涯中,如果系统需要记录一些应用日志的话,基本上就是封装一个日志类,然后把一些要记录的字段写入 ...

  9. C++线程安全日志库-Win32接口实现

    分享一个C++日志库,使用Win32接口编写,而且是线程安全的日志库.比较简单,只有2个文件,容易上手,使用起来也很简单 头文件 如下是日志库的头文件,接口看似很多,但是使用起来最常用的也就那么几个 ...

随机推荐

  1. linux学习笔记-7.文件属性

    1.查看文件夹属性 ls -ld test 2.文件夹的rwx --x:可以cd进去r-x:可以cd进去并ls-wx:可以cd进去并touch,rm自己的文件,并且可以vi其他用户的文件-wt:可以c ...

  2. Android- SharedPreferences 使用详解

    Android-SharedPreferences 使用详解 参考 https://developer.android.google.cn/reference/android/content/Shar ...

  3. python 修改文件中的内容

    在python的文件操作中,是没有办法对文件中具体某行或者某个位置的内容进行局部的修改的,如果需要对文件的某一行内容进行修改,可以先将文件中的所有的内容全部读取出来,再进行内容判断,是否是需要修改的内 ...

  4. 表达式括号匹配(stack.cpp)

    [问题描述]        假设一个表达式有英文字母(小写).运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符.请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回 ...

  5. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) F. Souvenirs 线段树套set

    F. Souvenirs 题目连接: http://codeforces.com/contest/765/problem/F Description Artsem is on vacation and ...

  6. httpclient的并发连接问题

    昨天的搜索系统又出状况了,几个库同时重建索引变得死慢.经过一个上午的复现分析,确定问题出现httpclient的使用上(我使用的是3.1这个被广泛使用的遗留版本).搜索系统在重建索引时,是并发多个线程 ...

  7. 使用MFC做一个简单的‘能自动生成小学生四则运算的软件’

    这是软件工程的第一次作业!但由于我们python还没入门,所以这次的要求是‘语言不限’. 小学期做过一个关于MFC的‘资金管理系统’,也正好可以有界面,所以就选择了自己很熟悉的MFC来做这个作业! 1 ...

  8. ORM for Net主流框架汇总与效率测试

    框架已经被越来越多的人所关注与使用了,今天我们就来研究一下net方面的几个主流ORM框架,以及它们的效率测试(可能会有遗漏欢迎大家讨论). ORM框架:Object/Relation Mapping( ...

  9. 使用Puppeteer进行数据抓取(四)——快速调试

    在我们使用chrome作为爬虫获取网页数据时,往往需如下几步. 打开chrome 导航至目标页面 等待目标页面加载完成 解析目标页面数据 保存目标页面数据 关闭chrome 我们实际的编码往往集中在第 ...

  10. Amontec JTAGkey (FT2232)

    The JTAGkey is based on the FTDIChip FT2232L, is a USB 2.0 device and is used for: On-Chip Debugging ...