日志库比较

日志库的要求:

1、多线程安全,别多个线程同时操作写文件出问题

2、日志内容分优先等级(错误,警告,信息)

3、可远程上传或者远程捞取。

 

IoT日志利器:嵌入式日志客户端(C Producer)发布:阿里的 C-Producer 日志库

目录(?)[-]

  1. log4j的衍生品

    1. 1 log4cxx

    2. 2Log4cpp

    3. 3log4c

    4. 4 log4cplus

  2. google glog

  3. z-log

  4. spdlog

  5. c-log

  6. syslog-ng

  7. 轻量级日志EasyLogger

    1. 1 介绍

    2. 2 主要特性

 

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

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

1 log4j的衍生品


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

1.1 log4cxx


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

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

1.2Log4cpp


 

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

而log4c ,

1.3log4c

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

1.4 log4cplus

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

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

 

作者是Tad E. Smith。log4cplus具有线程安全、灵活、以及多粒度控制的特点,通过将信息划分优先级使其可以面向程序调试、运行、测试、和维护等全生命周期; 你可以选择将信息输出到屏幕、文件、 

NT event log、甚至是远程服务器;通过指定策略对日志进行定期备份等等。

2 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, 精简日志字符串信息。

3 z-log


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

 

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

由难易编写

日志库比较_第1张图片

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

4 spdlog


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

特性:

  • 非常快

  • 只包含头文件

  • 无需依赖第三方库

  • 支持跨平台 - Linux / Windows on 32/64 bits

  • 支持多线程

  • 可对日志文件进行循环输出

  • 可每日生成日志文件

  • 支持控制台日志输出

  • 可选的异步日志

  • 支持日志输出级别

  • 可自定义日志格式

5 c-log


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

6 syslog-ng


 

syslog-ng作为syslog的替代工具,可以完全替代syslog的服务,并且通过定义规则,实现更好的过滤功能 

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

7 轻量级日志EasyLogger


地址 :https://github.com/armink/EasyLogger

7.1 介绍


EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。

7.2 主要特性


 

支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash…); 

日志内容可包含级别、时间戳、线程信息、进程信息等; 

日志输出被设计为线程安全的方式,并支持 异步输出 及 缓冲输出 模式; 

支持多种操作系统(RT-Thread、UCOS、Linux、Windows…),也支持裸机平台; 

日志支持 RAW格式 ; 

支持按 标签 、 级别 、 关键词 进行动态过滤; 

各级别日志支持不同颜色显示 

扩展性强,支持以插件形式扩展新功能。 

名词解释: 1、RAW格式:未经过格式化的原始日志。 2、标签:在软件中可以按照文件、模块、功能等方面,对需要打印的日志设定标签,实现日志分类。

 

 

 

===========================

C/C++ 文件上传组件

===========================

基于http的:1、curl、2、wget

你可能感兴趣的:(C/C++)