libslog---高性能开源C/C++多线程安全日志库
生活随笔
收集整理的這篇文章主要介紹了
libslog---高性能开源C/C++多线程安全日志库
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Fromwiki:?https://code.google.com/p/easynetwork/wiki/libslog
libslog是一個基于linux的高性能開源C/C++多線程安全日志庫。EasyNetwork?服務端開源框架使用了libslog作為日志庫。 libslog的最新源碼可從這里下載:libslog.tar 有任何寶貴的意見和建議請聯(lián)系作者:xmulyj@gmail.com
b. 簡單的配置參數(shù)
c. 支持熱更新log參數(shù),如從INFO級別更改為DEBUG不需要重啟服務器
make b. 安裝 sudo make install c. 使用
libslog使用非常簡單,在自己的源文件中包含頭文件slog.h:
#include "slog.h"使用libslog時需要先進行初始化:
SLOG_INIT(SLOG_CONFIG_PATH); //SLOG_INIT(NULL);其中SLOG_CONFIG_PATH是slog的配置文件路徑,如果為NULL的話將使用默認的配置參數(shù),并且log將打印到屏幕。 libslog有5個log級別:TRACE、DEBUG、INFO、WARN、ERROR。TRACE級別最高,將打印所有級別的log。DEBUG次之,可以打印TRACE除外的其他log。ERROR最低,只打印本級別的log。slog的使用非常簡單,與C語言的printf格式一致:
#include "slog.h"int main() {SLOG_INIT(NULL);SLOG_TRACE("hello slog. %d", 1);SLOG_DEBUG("hello slog. %d", 2);SLOG_INFO("hello slog. %d", 3);SLOG_WARN("hello slog. %d", 4);SLOG_ERROR("hello slog. %d", 5);SLOG_UNINIT();return; }其中SLOG_UNINIT()是對slog的反初始化。 最后鏈接slog庫:
g++ a.cpp -lslog -o test_slog三、 性能 a. 測試條件 每次寫入100w條數(shù)據(jù),測試10次. 每條數(shù)據(jù)的格式如下: slog: 2012-09-24 17:55:52[WARN]ccccccc... (99個'C'字符) log4cpp: 2012-09-24 18:03:58 [INFO]: [sub1] ccccccc... (99個'C'字符) b. 機器負載slog: load average: 0.25, 0.32, 0.60 log4cpp: load average: 0.29, 0.37, 0.51c. log4cpp版本
log4cpp-1.1rc1.tar.gz
d. 測試結(jié)果
----------------------------\ | slog | log4cpp ---------------------------1 | 1.7867 | 10.4785 2 | 1.8693 | 11.6938 3 | 1.8035 | 9.6103 4 | 1.9039 | 9.6179 5 | 1.7574 | 10.6606 6 | 1.7622 | 9.7011 7 | 1.7441 | 9.5807 8 | 1.8711 | 11.16469 | 1.7866 | 9.6206 10 | 1.7732 | 9.6028 ----|----------------------- avg | 1.8058 | 10.17309 ----------------------------(單位:s)
性能比log4cpp高5倍:)
### log級別slog_level=DEBUG #slog_level=INFO ### log文件名slog_log_name=./log/server.log ### log 文件最大大小(單位M)slog_log_maxsize=20M ### log文件最多個數(shù)slog_log_maxcount=30 ### log緩沖區(qū)大小(單位KB,默認512KB)slog_flush_size=1024 ### log緩沖刷新間隔(單位s,默認1s)slog_flush_interval=2 ### log動態(tài)更新配置參數(shù)的時間間隔(單位s,默認60s)config_update_interval=30
char buf[100];memset(buf, 'c', 100);buf[99]=0;int i,j; struct timeval start, end;printf("start...\n"); gettimeofday(&start, NULL); for(i=0; i<</span>100; ++i) {for(j=0;j<</span>10000; ++j)SLOG_WARN("%s", buf); }gettimeofday(&end, NULL);printf("end...\n");int us = (end.tv_sec-start.tv_sec)*1000000+(end.tv_usec-start.tv_usec); printf("use time:%0.4f(s)\n", us/1000000.0);
b. log4cpp_test.cpp
char buf[100];memset(buf, 'C', 100);buf[99] = '\0';int i, j; struct timeval start, end;printf("start...\n"); gettimeofday(&start, NULL); for(i=0; i<</span>100; ++i) {for(j=0; j<</span>10000; ++j)sub1.info(buf); }gettimeofday(&end, NULL);printf("end...\n");int us = (end.tv_sec-start.tv_sec)*1000000+(end.tv_usec-start.tv_usec); printf("use time:%0.4f(s)\n", us/1000000.0);
libslog是一個基于linux的高性能開源C/C++多線程安全日志庫。EasyNetwork?服務端開源框架使用了libslog作為日志庫。 libslog的最新源碼可從這里下載:libslog.tar 有任何寶貴的意見和建議請聯(lián)系作者:xmulyj@gmail.com
一、 特性
a. 多線程安全b. 簡單的配置參數(shù)
c. 支持熱更新log參數(shù),如從INFO級別更改為DEBUG不需要重啟服務器
二、安裝與使用
a. 編譯make b. 安裝 sudo make install c. 使用
libslog使用非常簡單,在自己的源文件中包含頭文件slog.h:
#include "slog.h"使用libslog時需要先進行初始化:
SLOG_INIT(SLOG_CONFIG_PATH); //SLOG_INIT(NULL);其中SLOG_CONFIG_PATH是slog的配置文件路徑,如果為NULL的話將使用默認的配置參數(shù),并且log將打印到屏幕。 libslog有5個log級別:TRACE、DEBUG、INFO、WARN、ERROR。TRACE級別最高,將打印所有級別的log。DEBUG次之,可以打印TRACE除外的其他log。ERROR最低,只打印本級別的log。slog的使用非常簡單,與C語言的printf格式一致:
#include "slog.h"int main() {SLOG_INIT(NULL);SLOG_TRACE("hello slog. %d", 1);SLOG_DEBUG("hello slog. %d", 2);SLOG_INFO("hello slog. %d", 3);SLOG_WARN("hello slog. %d", 4);SLOG_ERROR("hello slog. %d", 5);SLOG_UNINIT();return; }其中SLOG_UNINIT()是對slog的反初始化。 最后鏈接slog庫:
g++ a.cpp -lslog -o test_slog三、 性能 a. 測試條件 每次寫入100w條數(shù)據(jù),測試10次. 每條數(shù)據(jù)的格式如下: slog: 2012-09-24 17:55:52[WARN]ccccccc... (99個'C'字符) log4cpp: 2012-09-24 18:03:58 [INFO]: [sub1] ccccccc... (99個'C'字符) b. 機器負載slog: load average: 0.25, 0.32, 0.60 log4cpp: load average: 0.29, 0.37, 0.51c. log4cpp版本
log4cpp-1.1rc1.tar.gz
d. 測試結(jié)果
----------------------------\ | slog | log4cpp ---------------------------1 | 1.7867 | 10.4785 2 | 1.8693 | 11.6938 3 | 1.8035 | 9.6103 4 | 1.9039 | 9.6179 5 | 1.7574 | 10.6606 6 | 1.7622 | 9.7011 7 | 1.7441 | 9.5807 8 | 1.8711 | 11.16469 | 1.7866 | 9.6206 10 | 1.7732 | 9.6028 ----|----------------------- avg | 1.8058 | 10.17309 ----------------------------(單位:s)
性能比log4cpp高5倍:)
四、 slog的配置參數(shù)
slog的配置參數(shù)非常簡單,并且支持熱更新,即在不需要重啟服務器的情況下修改配置參數(shù),這點對線上跟蹤問題非常有用。### log級別slog_level=DEBUG #slog_level=INFO ### log文件名slog_log_name=./log/server.log ### log 文件最大大小(單位M)slog_log_maxsize=20M ### log文件最多個數(shù)slog_log_maxcount=30 ### log緩沖區(qū)大小(單位KB,默認512KB)slog_flush_size=1024 ### log緩沖刷新間隔(單位s,默認1s)slog_flush_interval=2 ### log動態(tài)更新配置參數(shù)的時間間隔(單位s,默認60s)config_update_interval=30
五、 測試代碼(見源碼)
a. slog_test.cchar buf[100];memset(buf, 'c', 100);buf[99]=0;int i,j; struct timeval start, end;printf("start...\n"); gettimeofday(&start, NULL); for(i=0; i<</span>100; ++i) {for(j=0;j<</span>10000; ++j)SLOG_WARN("%s", buf); }gettimeofday(&end, NULL);printf("end...\n");int us = (end.tv_sec-start.tv_sec)*1000000+(end.tv_usec-start.tv_usec); printf("use time:%0.4f(s)\n", us/1000000.0);
b. log4cpp_test.cpp
char buf[100];memset(buf, 'C', 100);buf[99] = '\0';int i, j; struct timeval start, end;printf("start...\n"); gettimeofday(&start, NULL); for(i=0; i<</span>100; ++i) {for(j=0; j<</span>10000; ++j)sub1.info(buf); }gettimeofday(&end, NULL);printf("end...\n");int us = (end.tv_sec-start.tv_sec)*1000000+(end.tv_usec-start.tv_usec); printf("use time:%0.4f(s)\n", us/1000000.0);
總結(jié)
以上是生活随笔為你收集整理的libslog---高性能开源C/C++多线程安全日志库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于ES、PES、PS以及TS码流
- 下一篇: Cenos 软件安装