log4cplus與g3log效能測試

2021-09-14 01:35:53 字數 2881 閱讀 3048

g3log作者對spdlog的對比和嘲諷

乙個lockfree的queue,被g3log的作者推薦

簡單地對log4cplus和g3log的效能做了測試,列印1百萬條日誌資訊所需時間如下:

linux

windows

log4cplus

同步4s

6s非同步

1.9s

64sg3log

非同步2.3s

待做對比說明:

1. linux用的虛擬機器,作業系統為red hat enterprise linux server release 6.7 (santiago), 8核cpu,記憶體32g,intel(r) xeon(r) cpu e5-2690 v4 @ 2.60ghz。

2. windows用的實體機,作業系統為win7, intel(r) core(tm) i5-6500, 3.2ghz,  記憶體16g。

3. 由於windows和linux所用配置完全不一樣,可能對於兩個作業系統之間的對比沒有什麼可比性。

4. log4cplus在windows下非同步模式非常的慢(經過多次跑都差不多的慢,把配置檔案裡的queuelimit增加到1百萬也沒用),不知道瓶頸是在**,也可能是我的程式或配置有問題。

log4cplus的測試程式如下:

#include #include #include #include #include #include int readfile(const char* file_path, std::vector* o_data)

in.seekg(0, std::ifstream::end);

size_t size = (size_t) in.tellg ();

in.seekg(0, std::ifstream::beg);

o_data->resize (size);

in.read(&(*o_data)[0], size);

if (in.gcount() != size)

return 0;

}int main(int argc, char* ar**)

std::string config_path(ar**[1]);

std::string log_config;

std::vectordata;

int res = readfile(config_path.c_str(), &data);

if (0 != res)

std::string config_str(&data[0], data.size());

std::stringstream css(config_str);

boost::property_tree::ptree pt;

boost::property_tree::read_ini(css, pt);

std::stringstream ss;

boost::property_tree::write_ini(ss, pt.get_child("log4cplus"));

log4cplus::initialize();

log4cplus::propertyconfigurator pc(ss);

pc.configure();

log4cplus::logger logger = log4cplus::logger::getinstance("global");

for(int i=0; i<1000000; ++i)

log4cplus::logger::shutdown();

return 0;

}

配置檔案如下:

## synchronous log properties.

[log4cplus_sync]

log4cplus.logger.global = info, sa

## asynchronous log properties.

[log4cplus]

log4cplus.logger.global = info, aa

linux下的makefile內容如下:

main:

g++ -std=c++11 -wall -o3 -l/home/wqf/usr/lib/boost_1_67_0/lib/ -lboost_system -lboost_filesystem -lboost_locale -lboost_date_time -llog4cplus main.cc -o main

g3log的測試程式如下:

#include #include #include #include #include std::string path_to_log_file = "./";

std::string log_file = "g3logfile";

std::unique_ptrworker;

void log_init()

void log_shutdown()

int main(int argc, char* ar**)

log_shutdown();

return 0;

}

linux下的makefile內容如下:

main:

g++ -std=c++14 -wall -o3 -i/home/wqf/usr/lib/g3log/include -l/home/wqf/usr/lib/g3log/lib -lg3logger main.cc -o main

log4cplus安裝測試

先介紹一下它的基本要素。layouts 布局器,控制輸出訊息的格式.如螢幕,檔案等等 logger 記錄器,儲存並跟蹤物件日誌資訊變更的實體,當你需要對乙個物件進行 記錄時,就需要生成乙個logger。categories 分類器,層次化 hierarchy 的結構,用於對被記錄資訊的分類,層次中 ...

開源日誌系統 log4cplus 二

本文介紹了使用log4cplus有六個步驟,並提供了一些例子引導你了解log4cplus的基本使用。基本使用 使用log4cplus有六個基本步驟 下面通過一些例子來了解log4cplus的基本使用。using namespace log4cplus using namespace log4cplu...

開源日誌系統 log4cplus 七

經過短暫的熟悉過程,log4cplus已經被成功應用到了我的專案中去了,效果還不錯,除了上文提及的 功能之外,下面將介紹log4cplus提供的執行緒和套接字的使用情況。ndc 首先我們先了解一下log4cplus中嵌入診斷上下文 nested diagnostic context 即ndc。對lo...