glog
glog是一个轻量、稳定、开源的日志系统,详细见上一篇文章所述.这里主要介绍glog的使用.
glog获取和编译
- 获取glog工程
git clone https://github.com/google/glog.git - 编译
我这里使用编译工具是”Visual Studio2015”,打开”google-glog.sln”工程,编译会报如下错误:
D:\src\test\glog\src\windows\port.h(116): error C2375: 'snprintf': redefinition; different linkage
...
snprintf重复定义问题,其中一种解决办法:
--- a/src/windows/port.h
+++ b/src/windows/port.h
@@ -111,6 +111,7 @@ enum { STDIN_FILENO = 0, STDOUT_FILENO = 1, STDERR_FILENO = 2 };
* because they don't always NUL-terminate. :-( We also can't use the
* name vsnprintf, since windows defines that (but not snprintf (!)).
*/
+#define HAVE_SNPRINTF
#ifndef HAVE_SNPRINTF
编译成功,生成动态库(libglog.dll,libglog.lib),和静态库(libglog_static.lib).接下来以动态库的方式说明glog的使用.
glog使用
- 添加glog模块到工程
- 头文件
设置VS2015工程头文件路径:
- 头文件
代码添加:
//为了防止windows.h头文件中的ERROR与glog的ERROR重定义问题.这个宏必须在包含logging.h之前定义!
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include <glog/logging.h>
- 添加lib
设置VS2015工程lib路径:
添加代码:
//import lib
#pragma comment(lib,"libglog.lib")
- 添加dll
将前面编译好的”libglog.dll”放到你的运行程序的同级目录下.
LOG
输出你的第一条LOG信息:
//programe name:"HelenXR_glog_program"
google::InitGoogleLogging("HelenXR_glog_program");
LOG(INFO) << "google log first info level message!";
//...... DoSomething
//Shutdown google's logging library.
google::ShutdownGoogleLogging();
此时如果你是的工程时控制台程序,你会发现”google log first info level message!”这句信息并没有输出到控制台中,它们去哪了?别急,这时候你要保持冷静!冷静!冷静!
如果没有设置日志存放的文件夹(下面我们会介绍如何保存到指定文件夹),它们会被存放到指定的路径(windows平台上会默认存放到$(LOCALAPPDATA)的Temp文件夹下,如:C:\Users\dell\AppData\Local\Temp,这个路径中的”dell”是计算机当前的用户名),你可以找到以特定格式命名的文件,格式为:
/tmp/<program name>.<hostname>.<user name>.log.<severity level>.<date>.<time>.<pid>
例如,我这里运行的是”HelenXR_glog_program.PC-2016-0510-9.dell.log.INFO.20170426-113842.14508”(这个文件名看起来很完整,实际使用还是不方便,花点时间可以修改,这里是我之前做的一个尝试,如果你有兴趣可以做的更好),打开这个文件我们可以看到如下信息:
Log file created at: 2017/04/26 11:38:42
Running on machine: PC-2016-0510-9
Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg
I0426 11:38:42.172986 14132 glog.cpp:20] google log first info level message!
上面介绍了日志输出的格式和我们