经常使用Ceres里面包含glog日志库,需要进行输出日志,索性使用glog。
1编译与注意事项
1、开源项目首页已经从https://code.google.com/p/google-glog/迁移到https://github.com/google/glog。当前主版本是0.3.4。
2、下载代码后,双击根目录下的google-glog.sln,Visual Studio 2015提示先进行迁移,成功后就可以编译了。
3、在解决方案下有四个工程:libglog(是动态链接库工程,生成libglog.dll和libglog.lib),libglog_static(是静态库工程,生成libglog_static.lib,运行时不需要libglog.dll),logging_unittest和logging_unittest_static是相应的测试工程。
4、修改配置平台:默认平台是debug win32,在配置管理器中,修改想要的配置,例如修改为release x64
5、修改属性表:Glog不支持Unicode宽字符集,工程属性字符集保持多字节字符集。“C/C++”-“代码生成”中的“运行库”,libglog动态库工程必须选择“多线程DLL”或“多线程调试DLL”,libglog_static静态库工程必须选择“多线程”或“多线程调试”。
6、修改属性表:使用静态库必须在预处理器添加:GOOGLE_GLOG_DLL_DECL=。动态库不必添加。因windows.h中定义的宏ERROR,与glog中定义的宏ERROR冲突,预处理器添加GLOG_NO_ABBREVIATED_SEVERITIES
7、按需要编译库。例如生成静态库,点击解决方案中的libglog_static,右键生成即可,在输出中,可以看到在glog\x64\Release\生成库文件
8、snprintf重复定义问题:在 #ifndef HAVE_SNPRINTF前添加#define HAVE_SNPRINTF。1
9、glog使用:添加库文件:在包含目录添加头文件路径,附加库目录输入lib文件路径,附加依赖项添加lib文件名称。在使用的地方#include<glog/logging.h>。
2多个文件使用glog
新建class,SimpleClass
#pragma once
#include<glog/logging.h>
class SimpleClass
{
public:
SimpleClass()
{
LOG(INFO) << "this is a simpleClass construct function";
}
~SimpleClass() = default;
};
在main函数中调用class,并统一生成日志
//
//https://www.cnblogs.com/hiloves/p/6009707.html
//https://www.jb51.net/article/238648.htm
//https://blog.csdn.net/dabenxiong666/article/details/71190102
//https://blog.csdn.net/longfeihufengyun/article/details/50319073
//https://zhuanlan.zhihu.com/p/99552958
#include <iostream>
#include<glog\logging.h>
#include"SimpleClass.h"
int main()
{
//设置文件输出路径
FLAGS_log_dir = "./";
//是否将全部日志仅输出到控制台,否则默认输出error以上日志到控制台
//FLAGS_logtostderr = true;
//是否同时输出到控制台和文件
FLAGS_alsologtostderr = true;
//控制台日志是否支持颜色
FLAGS_colorlogtostderr = true;
// 如果不设置FLAGS_logtostderr ,FLAGS_alsologtostderr,FLAGS_colorlogtostderr,仅设置输出路径,则默认仅输出文件
//全局初始化log日志,参数为工程名称
google::InitGoogleLogging("glog_test");
//四种日志级别
//末尾不需加endl,glog会自动换行。
LOG(INFO) << "info test"; //输出一个Info日志
LOG(WARNING) << "warning test"; //输出一个Warning日志
LOG(ERROR) << "error test"; //输出一个Error日志
// LOG(FATAL) << "fatal test"; //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序
//debug模式下才输出
DLOG(INFO) << "debug log";
//应用到同一工程下的其他cpp文件
SimpleClass sc;
google::ShutdownGoogleLogging();
std::cout << "Hello World!\n";
}
结果:
控制台日志:
文件日志:用记事本打开即可。第二个info文件包含了info、warning、error、fatal所有级别日志。