修改google glog默认支持异步写

昨天跟同事商量,他希望用日志库越简单越好,我就想到可以内置异步写,但是x64平台有点问题,glog链接的时候不知道在哪链接的,搞得很蛋疼,采取暴力的解决办法:删除所有 的GOOLE_DLL_EXPORT,只生成静态lib,这样就可控了。

内部添加了两个文件,active,objectpool;active就是之前封装的produter-consumer模式;如果本着最简化的原则还可以用STL内置的allocator来替换现在的objectpool,之前分析过这个内存池,也是很有效的,以后可考虑修改。

因为glog内部默认就是用logfileobject来写日志,所以直接在这个类里做修改就行。

client的用法当然就没什么变化了:

#define GLOG_NO_ABBREVIATED_SEVERITIES
#include <windows.h>
#include <glog/logging.h>
#include <random>
#include <chrono>

typedef std::chrono::high_resolution_clock::time_point time_point;
typedef std::chrono::duration<int64_t,std::ratio<1, 1000> > millisecond;
typedef std::chrono::duration<int64_t,std::ratio<1, 1000000> > microsecond;


void writeLog(void* para)
{
	std::random_device rd;
	int lognum = *(int*)para;
	for (int i = 0; i < lognum; ++i){
		int j = 0;
		do 
		{
			++j;
		} while (j < 1000);

		LOG(INFO) << "how are " << rd() << " cookies";
	}
}
using namespace google;
int main(int argc, char* argv[]) {

	auto start_time = std::chrono::high_resolution_clock::now();
	google::InitGoogleLogging("test/testsss");

	google::SetLogDestination(google::GLOG_INFO, "../x64/Release/Release"); 
	int num_cookies = 0;
	int lognum = 100;
	int threadNum = 1;
	std::thread* threads = new std::thread[threadNum];
	for (int i = 0; i < threadNum; ++i)
	{
		threads[i] = std::thread(writeLog, &lognum);
	}

	for (int i = 0; i < threadNum; ++i)
	{
		threads[i].join();
	}

	auto application_end_time = std::chrono::high_resolution_clock::now();
	auto application_time_us = std::chrono::duration_cast<microsecond>(application_end_time - start_time).count()/1000;
	LOG(INFO) << "threadglog total use " << application_time_us << "s";
	google::ShutdownGoogleLogging();
}

另外fileobject在设置一些属性的时候会加锁,其实我们应用时一般只会在一个线程里把所有属性都once inited,所有加锁已无必要。但暂时保留。可以定制的地方还很多。

最后开始正式维护gitbub上自己的项目,也就是本项目:https://github.com/boyxiaolong/Proejcts

表示还没有完全开始造轮子,but a good start.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值