glog 的使用
来源:互联网 发布:淘宝01店手机是真的吗 编辑:程序博客网 时间:2024/05/21 05:05
glog是大名鼎鼎的Google公司的开源的C++日志类库
开发环境
glog 0.3.4 下载地址 https://github.com/google/glog 在他的Google官网上最新版本是0.3.3
visual studio 2015
windows 7 x64 SP1
编译说明
由于源码里面附带vss的项目文件使用visual studio 2015打开即可。他会自动更新。
会出现下面的编译错误
va_copy snprintf 重定义, 注释掉即可。
std::min 提示未定义 添加 #include <algorithm> 即可,这个也可能不出现。好像我是用0.3.3的时候出现了但是在0.3.4上就没有出现。
此时会编译成功。
增加64位编译时会出现
_asm int 3 这句编译错误,使用__debugbreak(); 他的功能是调试的时候中断执行。
在windows下使用
在项目中添加包含目录 编译的源码路径\src\windows
在项目中添加库目录将你编译成功的lib dll 所在目录添加进去
编译项目,出现如下错误
error ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail
在log_severity.h头文件中,意思是ERROR已经定义出现了二义性。
将log_sererity.h的相关代码注释掉即可
//# ifdef ERROR
//# error ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h. See the document for detail.
//# endif
//const int INFO = GLOG_INFO, WARNING = GLOG_WARNING,
// ERROR = GLOG_ERROR, FATAL = GLOG_FATAL;
编译项目成功。
glog的使用源码
google::InitGoogleLogging("");
char tempArray[MAX_PATH] = { 0 };
char* lptemp(tempArray);
GetLogPath(tempArray); //获得程序日志目录
lptemp = tempArray + strlen(tempArray);
strcpy_s(lptemp, 16, "info_");
//设置不同级别对应不同的文件
google::SetLogDestination(google::GLOG_INFO, tempArray);
strcpy_s(lptemp, 16, "warning_");
google::SetLogDestination(google::GLOG_WARNING, tempArray);
strcpy_s(lptemp, 16, "error_");
google::SetLogDestination(google::GLOG_ERROR, tempArray);
strcpy_s(lptemp, 16, "fatal_");
google::SetLogDestination(google::GLOG_FATAL, tempArray);
FLAGS_logtostderr = false; //是否将所有日志输出到stderr而非文件
FLAGS_alsologtostderr = false;//是否将所有日志输出到文件和stderr
FLAGS_minloglevel = google::GLOG_INFO; //记录的最小级别
FLAGS_logbuflevel = google::GLOG_WARNING;
FLAGS_logbufsecs = 10; //缓冲日志输出,默认30秒
FLAGS_max_log_size = 10; //日志文件最大尺寸
FLAGS_stop_logging_if_full_disk = true; //当磁盘写满时停止日志输出
//设置完成后就能写日志了。
LOG(INFO) << "info";
LOG(WARNING) << "Warning";
LOG(ERROR) << "Error";
LOG(FATAL) << "Fatal";
//使用完成释放
google::ShutdownGoogleLogging();
发现如下问题或者与log4cplus不同的地方:
设置不同级别对应不同的文件log4cplus仅仅往对应的级别文件中写,其他级别不会写。但是glog会记录所有小于等于记录级别的日志。
例如:
LOG(INFO) << "info";
LOG(WARNING) << "WARNING";
按照上面的设置
“info”在记录info和warning两个级别的文件里面,而log4cplus不会这么处理只会在info文件里面。
在logging.cc文件里面760行的函数如下:
inline void LogDestination::LogToAllLogfiles(LogSeverity severity,
time_t timestamp,
const char* message,
size_t len) {
if ( FLAGS_logtostderr ) { // global flag: never log to file
ColoredWriteToStderr(severity, message, len);
} else {
for (int i = severity; i >= 0; --i)
LogDestination::MaybeLogToLogfile(i, timestamp, message, len);
}
}
假如要实现上面的不同只需更改上面的函数即可!我没有试过不能百分百确定!!!
//GetLogPath的源码
void GetLogPath(char* pLogPath)
{
TCHAR tempArray[MAX_PATH] = { 0 };
GetModuleFileName(NULL, tempArray, MAX_PATH);
LPTSTR lptemp = _tcsrchr(tempArray, _T('\\'));
lptemp = lptemp + 1;
_tcscpy_s(lptemp, 32, _T("\\Log\\"));
if (!PathIsDirectory(tempArray))
{
CreateDirectory(tempArray, nullptr);
}
::WideCharToMultiByte(CP_ACP, 0, tempArray, -1, pLogPath, MAX_PATH, nullptr, nullptr);
}
- glog的使用
- glog的使用
- glog 的使用
- glog的使用教程
- glog的编译,配置,使用
- GoogleLog(GLog)的简单使用
- GLOG的安装与使用
- Glog使用
- glog使用
- glog使用
- window环境下glog的使用
- glog的安装,配置和使用
- 如何使用google的日志库(glog)
- window环境下glog的使用
- glog的编译和使用(转+总结)
- 在VS2015下,glog的简单使用
- GLog使用笔记
- google-glog安装使用
- Neutron Routed Networks(by quqi99)
- Elasticsearch-2.3.x填坑之路
- 1031. Hello World for U (20)
- spring的工作原理总结
- [MTK] BT驱动调试总结
- glog 的使用
- Activity跳转交换数据
- Swap Nodes in Pairs
- 自定义分享
- C++中 构造函数 析构函数 能否调用虚函数的问题
- VS 调试和承载进程
- *.c~文件
- 小白笔记----------------------Mysql5.7.12之字符集设置
- adb怎么判断是否有root权限,并更改system/app内容