修改google glog默认支持异步写
2014-05-05 06:35
375 查看
昨天跟同事商量,他希望用日志库越简单越好,我就想到可以内置异步写,但是x64平台有点问题,glog链接的时候不知道在哪链接的,搞得很蛋疼,采取暴力的解决办法:删除所有 的GOOLE_DLL_EXPORT,只生成静态lib,这样就可控了。
内部添加了两个文件,active,objectpool;active就是之前封装的produter-consumer模式;如果本着最简化的原则还可以用STL内置的allocator来替换现在的objectpool,之前分析过这个内存池,也是很有效的,以后可考虑修改。
因为glog内部默认就是用logfileobject来写日志,所以直接在这个类里做修改就行。
client的用法当然就没什么变化了:
另外fileobject在设置一些属性的时候会加锁,其实我们应用时一般只会在一个线程里把所有属性都once inited,所有加锁已无必要。但暂时保留。可以定制的地方还很多。
最后开始正式维护gitbub上自己的项目,也就是本项目:https://github.com/boyxiaolong/Proejcts
表示还没有完全开始造轮子,but a good start.
内部添加了两个文件,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.
相关文章推荐
- 修改chrome默认搜索引擎访问google.com
- ASP.NET Core 2.0系列学习笔记-应用程序修改默认端口支持外网IP访问
- Linux下Apache修改默认网站目录和支持文件
- 让xp远程桌面连接支持多用户与远程桌面默认端口修改
- 关于方正中间件修改默认主题首页技术支持信息
- 将应用程序添加到gnome3的全局菜单中(并支持修改为默认程序)
- 修改chrome的安装目录(默认的竟然安装在documents and settings目录,google真不厚道)
- 关于方正中间件修改默认主题首页技术支持信息
- 修改Windows Server 2008+IIS 7+ASP.NET默认连接限制,支持海量并发连接数
- 技巧:修改Chrome默认搜索引擎为Google.com
- android spinner默认样式不支持换行和修改字体样式 的解决方法
- 修改异步树的默认图标
- android 4.4.3上面,联系人的头像默认显示首字母,但是不支持中文字符,修改支持中文
- 使用chsh修改默认的shell为bash,原来为sh不支持TAB等功能
- 代码修改Webservice的地址,支持同步和异步方式
- 修改chrome中google默认搜索url
- 修改Windows Server 2008+IIS 7+ASP.NET默认连接限制,支持海量并发连接数
- React-Native 在iOS9之后,网络请求默认为Https请求,如需支持Http,修改info.plist文件添加键值对设置允许http访问。
- pligg9.7beta搭起后HTML编辑器插件的安装(-fckeditor的配置与修改变相支持中文文件名:默认上传后不能正常调用-)就像csdn的这个编辑器
- 推荐一款Markdown富文本编辑器 React-quill,以及修改React-quill默认配置,支持React !