C/C++log日誌庫比較

C/C++log日誌庫比較 

轉至:https://blog.csdn.net/gatieme/article/details/50603682

2016年01月28日 23:21:24 JeanCheng 閱讀數:29746

版權聲明:本文爲博主原創文章 && 轉載請著名出處 @ http://blog.csdn.net/gatieme https://blog.csdn.net/gatieme/article/details/50603682

事實上,在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日誌函數庫。 
難易編寫

這裏寫圖片描述

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、標籤:在軟件中可以按照文件、模塊、功能等方面,對需要打印的日誌設定標籤,實現日誌分類。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章