c 工程 1.2 使用glog写日志-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 1235459
  • 博文数量: 76
  • 博客积分: 1959
  • 博客等级: 上尉
  • 技术积分: 2689
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-19 12:07
个人简介

樽中酒不空

文章分类

全部博文(76)

文章存档

2020年(4)

2019年(1)

2017年(2)

2016年(2)

2015年(7)

2014年(11)

2013年(13)

2012年(18)

2011年(2)

2010年(16)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: c/c

2020-08-06 16:45:33

前一节讲了最简单的c 程序框架,其中日志是向屏幕输出的,我们今天采用glog把日志写到文件里。同时也简单讲讲在windows下cmake的使用和vc2017的使用。

一 开发工具

windows使用vs, 首先安装好开发工具,微软官方下载vs,社区版就可以:。

当前最新版本是vs2019,本文使用是vs2017,安装文件实在是太大,没有更新到2019,大家随意。

 linux的开发环境比windows简单多了,配置好makefile(也可以使用cmake)就完事。

本文不打算写成水文,尽可能不注水,所以关于linux操作,vc 的使用,vim的使用,以及makefilecmakegccg 等都不做解释。

顺便推荐几本书做为c 编程的基础:k&rc语言编程,lippman的 essential c ,  有时间再细看c primer,然后具体做windows开发的可以看windows核心编程,linux下开发可以看unix高级编程或linux/unix系统编程手册。都有英文版本,建议直接看英文。

cmake准备

很多开源代码的编译需要cmake,我们直接下载安装。,选择合适版本。

glog编译

glog当前(202085日)最新版本是0.4,下载地址:https://github.com/google/glog/releases/tag/v0.4.0

linux系统下载 https://github.com/google/glog/archive/v0.4.0.tar.gz

windows系统下载https://github.com/google/glog/archive/v0.4.0.zip

下载后进行编译,linux下极简单,官方只说了一句话:./autogen.sh && ./configure && make && make install

windows下可以安装mingw等模拟linux环境,同样运行这句话。

本文以后重点介绍windows

1 使用cmake生成vc工程。

打开cmake-gui.exe,显示如下窗口:


最上面表示下载的源码所在位置,下面的表示编译生成的文件保存位置。下面是本文机器的位置:




1和2是刚才说的源码路径和生成文件路径。3是配置,点击后cmake会自动查找系统所需要的依赖。配置之后,再点击4生成vs工程。

点击3,还会弹出一个选项,一般选择64位系统。

然后 finish。运行过程中会报错:




大意是需要gflas

这里有两个方案:

1 下载gflags,编译生成再来编译glog

2 不需要glfags

本文采用方案2,在cmake gui中,选advanced然后把with_gflags的勾选去掉:



再回到第一步, cmake配置glog,正确填写gflas路径,就解决了。

然后点击generate,再open project。打开vs开始编译, 一切顺便的话如下图:



然后把编译目录下的include,lib文件复制到自己的源码目录下,再vs中配置一下:

项目属性一定要设置成x64的:

附加包含目录中要写上头文件位置:



预编译头选择不用。

然后,在前面代码基础上稍加几行代码就可以了。完整代码如下:



点击(此处)折叠或打开

  1. #include <iostream>// stl cout
  2. #include <signal.h>//signal头文件
  3. #include <chrono> //stl chrono头文件,时间工具,可以精确到,可以精确到纳秒
  4. #include <thread> //stl thread

  5. #include "include/glog/logging.h"
  6. #pragma comment(lib, "lib/release/glog.lib")
  7. using namespace google;


  8. static int signaled = 0;
  9. static void sigterm_handler(int sig)
  10. {
  11.     signaled = 1;
  12. }

  13. class app
  14. {
  15. public:
  16.     void run()
  17.     {
  18.         //std::chrono::milliseconds可以是以下四个中的一个:seconds,milliseconds,microseconds,nanoseconds
  19.         uint64_t start_millseconds = std::chrono::duration_cast<std::chrono::milliseconds>
  20.             (std::chrono::system_clock::now().time_since_epoch()).count();
  21.         for (;;)
  22.         {
  23.             if (signaled == 1)
  24.                 break;
  25.             else
  26.             {
  27.                 std::cout << "运行毫秒数:" << std::chrono::duration_cast<std::chrono::milliseconds>
  28.                     (std::chrono::system_clock::now().time_since_epoch()).count() - start_millseconds << std::endl;

  29.                 //c11支持u8转utf8,否则写到文件里乱码
  30.                 log(info) << u8"运行毫秒数:" << std::chrono::duration_cast<std::chrono::milliseconds>
  31.                     (std::chrono::system_clock::now().time_since_epoch()).count() - start_millseconds ;
  32.                 std::this_thread::sleep_for(std::chrono::seconds(1));
  33.             }
  34.         }
  35.     };
  36. };


  37. int main()
  38. {
  39.     google::initgooglelogging("demo2.exe");//
  40.     google::setlogdestination(google::glog_info, "demo2_");
  41.     log(info) << "hello world!";
  42.     std::cout << "hello world!\n";
  43.     signal(sigint, sigterm_handler); //ctrl c中断


  44.     app app;
  45.     app.run();
  46.     std::cout << "exit!\n";
  47.     log(info) << "exit!";
  48.     std::this_thread::sleep_for(std::chrono::seconds(1));

  49.     google::shutdowngooglelogging();
  50.     return 0;
  51. }

同样放到github上了:

运行结果后,在文件目录下生成一个新的文本文件,用编译工具打开,就看到显示内容。
比如:


文件内容:





最后,对代码简单做一下解释:
glog使用,在程序起始位置加:
google::initgooglelogging("demo2.exe");// 
google::setlogdestination(google::glog_info, "demo2_");

第一行是进程名,第二行是保存位置和文件名。
程序结束时调用:
google::shutdowngooglelogging();

glog功能很多,比如可以设置文件名格式,日志文件大小等。还可以修改源码实现自己想要的功能。有时间可以看看代码以及附带的sample。




阅读(3801) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图