Fromwiki: https://code.google.com/p/easynetwork/wiki/libslog
libslog是一个基于linux的高性能开源C/C++多线程安全日志库。EasyNetwork 服务端开源框架使用了libslog作为日志库。

libslog的最新源码可从这里下载:libslog.tar

有任何宝贵的意见和建议请联系作者:xmulyj@gmail.com

一、 特性

a. 多线程安全
b. 简单的配置参数
c. 支持热更新log参数,如从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的话将使用默认的配置参数,并且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条数据,测试10次. 每条数据的格式如下:
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.51

c. log4cpp版本

log4cpp-1.1rc1.tar.gz

d. 测试结果

----------------------------\  |  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的配置参数

slog的配置参数非常简单,并且支持热更新,即在不需要重启服务器的情况下修改配置参数,这点对线上跟踪问题非常有用。

### log级别slog_level=DEBUG
#slog_level=INFO
### log文件名slog_log_name=./log/server.log
### log 文件最大大小(单位M)slog_log_maxsize=20M
### log文件最多个数slog_log_maxcount=30
### log缓冲区大小(单位KB,默认512KB)slog_flush_size=1024
### log缓冲刷新间隔(单位s,默认1s)slog_flush_interval=2
### log动态更新配置参数的时间间隔(单位s,默认60s)config_update_interval=30

五、 测试代码(见源码)

a. slog_test.c

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---高性能开源C/C++多线程安全日志库相关推荐

  1. 介绍一个使用 Go 语言开发的高性能可配置可扩展的日志库 logit

    这是一个使用 Go 语言开发的高性能可配置可扩展的日志库,名字叫 logit. logit 是一个高性能的日志库,从测试结果来看,比主流日志库 zap.logrus 这些要快不少. logit 支持配 ...

  2. muduo学习笔记:base部分之高性能日志库

    服务端编程,日志必不可少,生产环境中应做到"Log Everything All The Time". 一个日志库答题分为前端(Logging.{h,cc})和后端(LogFile ...

  3. 深度|从Go高性能日志库zap看如何实现高性能Go组件

    导语:zap是uber开源的Go高性能日志库.本文作者深入分析了zap的架构设计和具体实现,揭示了zap高效的原因.并且对如何构建高性能Go语言库给出自己的建议. 作者简介:李子昂,美图公司架构平台系 ...

  4. Logan:美团点评的开源移动端基础日志库

    前言 Logan是美团点评集团移动端基础日志组件,这个名称是Log和An的组合,代表个体日志服务.同时Logan也是"金刚狼"大叔的名号,当然我们更希望这个产品能像金刚狼大叔一样犀 ...

  5. 深度 | 从Go高性能日志库zap看如何实现高性能Go组件

    导语:zap是uber开源的Go高性能日志库.本文作者深入分析了zap的架构设计和具体实现,揭示了zap高效的原因.并且对如何构建高性能Go语言库给出自己的建议. 作者简介:李子昂,美图公司架构平台系 ...

  6. 一文告诉你如何用好uber开源的zap日志库

    1. 引子 日志在后端系统中有着重要的地位,通过日志不仅可以直观看到程序的当前运行状态,更重要的是日志可以在程序发生问题时为开发人员提供线索. 在Go生态中,logrus[2]可能是使用最多的Go日志 ...

  7. muduo多线程异步日志分析

    最近在看muduo的源码,对于其日志系统的实现颇为感兴趣,找了两三天好好研究了一下,本文记录一些所学到的知识. 基础知识 日志是每个高性能服务器必备的组件,分为两种:诊断日志和交易日志.诊断日志,主要 ...

  8. Druid:一个用于大数据实时处理的开源分布式系统——大数据实时查询和分析的高容错、高性能开源分布式系统...

    转自:http://www.36dsj.com/archives/28590 Druid 是一个用于大数据实时查询和分析的高容错.高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分 ...

  9. C++11实战——多线程的日志类

    C++11实战--多线程的日志类 C++标准库的std::cout和std::ofstream重载了operator<<,单线程使用非常简单.但由于其并非线程安全,在多线程中使用则需要自己 ...

最新文章

  1. Java数据类型及变量作业_day02、Java变量与数据类型
  2. Some notes for CLFS2017
  3. 聊一聊CSS中的死循环
  4. Java使用OpenCV3.2实现视频读取与播放
  5. XAML实例教程系列 - 标记扩展(Markup Extensions)
  6. ML_集成学习与Boosting模型
  7. plsql 破解|oracle plsql 破解
  8. 【自考】-计算机网络原理
  9. 新手入门 | 算法书籍推荐
  10. 金蝶系统提示服务器不是有效的,金蝶服务器不是有效的,请重新设置问题
  11. HM5469A单节锂电池保护IC过流9A电流可以做8W
  12. 老路用得上的商学课-61-80学习(读书)笔记
  13. 时域反射仪(TDR)介绍
  14. linux 下安装openoffice服务 百度文库在线预览 doc转pdf、pdf转swf格式
  15. [附源码]Nodejs计算机毕业设计我的大学电子相册Express(程序+LW)
  16. Mysql索引、命令重点介绍
  17. 第九周.02.KAT
  18. 计算机电路计数器pl什么意思,计数器的原理为什么1下来是2.而且频率是一样的.它是怎么进位的.它的电路原理是什么...
  19. mysql索引与md5_谈Mysql索引
  20. hihihi,我又回来啦!今天分享的是2021:【例4.6】最大公约数 代码如下

热门文章

  1. SQLServer数据库自增长标识列的更新修改操作
  2. 使用Apache Archiva搭建Maven Repository Server
  3. oracle /+append/好用吗,ORACLE-insert /*+append*/提高性能
  4. python使用xlrd读取xlsx文件_005:【Python读取本地Excel文件】使用xlrd模块来读取本地Excel文件...
  5. mysql 单例模式好处_PHP单例模式的优点分析
  6. 在Putty或mRemote下输入和显示中文
  7. 《AlwaysRun团队》第三次作业:团队项目的原型设计
  8. java中等待所有线程都执行结束
  9. 基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自己主动适应宽带高度...
  10. Kafka Log Compaction 解析