《libglog在C++中的应用与使用技巧》一文详细介绍了Google开源的日志库libglog在C++编程中的集成方法、配置选项及高级用法,帮助开发者更高效地进行日志记录和调试。
附件包含了一个VS2010的工程文件以及一个C++日志类库——glog。
Google glog是一个用于程序级记录日志信息的c++库,使用方式与c++的stream操作类似:
```cpp
LOG(INFO) << Found << num_cookies << cookies;
```
这里的“LOG”宏为输出关键字,“INFO”则表示消息的重要性级别。
glog的主要功能包括:
1. 参数设置:通过命令行参数来控制日志记录行为;
2. 严重性分级:根据不同的等级进行日志的分类记录;
3. 条件化日志记录,可以基于条件选择是否输出信息;
4. 程序终止判断。提供了丰富的预设条件以决定程序何时停止运行;
5. 异常处理机制,允许自定义异常情况下的操作流程;
6. 支持调试模式:仅在开发阶段启用的日志功能;
7. 自定义日志内容格式和样式;
8. 线程安全的记录方式确保多线程环境中的并发访问问题得到妥善解决;
9. 提供了系统级日志服务,便于追踪整个系统的运行状态。
10. Google特有的perror风格错误信息输出
11. 日志字符串优化以减少冗余。
使用glog的基本步骤如下:
- 将glog文件夹复制到源代码目录中。
- 在工程设置中添加附加包含路径(如:`glog/include;`)和库路径(例如:`glog/lib;`),并根据需要在链接器的输入选项里加入相应的lib文件,具体对应关系如下:
- MDd: libglog32MDd.lib
- MD : libglog32MD.lib
- MTd: libglog32MTd.lib
- MT : libglog32MT.lib
建议使用MD和MDd配置,以避免内存泄漏问题,并且在需要时将相应的dll文件(位于`glog/bin`目录下)拷贝至程序的输出目录中。
示例代码如下:
```cpp
#include
using namespace std;
// 引入glog头文件,建议放置于stdafx.h内。
#define GLOG_NO_ABBREVIATED_SEVERITIES
#include logging.h
string GetAppPathA()
{
char szExePath[MAX_PATH] = {0};
GetModuleFileNameA(NULL,szExePath,MAX_PATH);
char *pstr = strrchr(szExePath,\\);
memset(pstr+1,0,sizeof(char));
string strAppPath(szExePath);
return strAppPath;
}
int main()
{
google::InitGoogleLogging(重签程序);
string strLogPath = GetAppPathA().append(/LogInfo/);
CreateDirectoryA(strLogPath.c_str(),NULL);
google::SetLogDestination(google::GLOG_INFO,strLogPath.c_str());
LOG(INFO) << log start...; // 普通日志
LOG(WARNING) << Warning log; // 警告信息
LOG(ERROR) << Error log; // 错误报告
int i = 4;
if (i == 4)
{
LOG_IF(INFO, true) << Log if Test;
}
return 0;
}
```
此示例展示了如何初始化glog库、配置日志输出路径和使用不同级别的日志记录功能。此外,还有更多高级用法可参考官方文档中的例子。