Google Glog 是一个C++语言的应用级日志记录框架,提供了 C++ 风格的流操作和各种助手宏。

1、开源项目首页已经从https://code.google.com/p/google-glog/迁移到https://github.com/google/glog。

2、下载代码后,双击根目录下的google-glog.sln3、在解决方案下有四个工程:libglog(是动态链接库工程,生成libglog.dll和libglog.lib),libglog_static(是静态库工程,生成libglog_static.lib,运行时不需要libglog.dll),logging_unittest和logging_unittest_static是相应的测试工程。

4、不需要更改工程属性。平台工具集是否是Windows XP(v140_xp)好像并不影响。Glog不支持Unicode宽字符集,工程属性字符集保持多字节字符集。“C/C++”-“代码生成”中的“运行库”,libglog动态库工程必须选择“多线程DLL”或“多线程调试DLL”,libglog_static静态库工程必须选择“多线程”或“多线程调试”。

5、按需要编译库。以静态库为例,动态库多一步将libglog.dll拷贝到程序目录下。分别编译Debug和Release,将Debug版的重命名为libglog_static_d.lib。将编译的lib文件拷贝到根目录\src\glog下,\src\glog是头文件目录。这个版本的静态库在试用时并未发现有内存泄露问题。

6、将\glog目录(包括了头文件和库文件)拷贝到自己的工程目录下。也可以新建另外的库目录,也可以在工程属性的附加目录中增加相应目录,这里采用在代码文件中控制。在工程资源管理器中添加glog头文件,如果先添加glog目录再添加头文件会提示glog头文件中的#include路径出错,手动删除路径中的“glog\”可解决。

7、在需要的地方#include "glog/logging.h"。建议添加到stdafx.h中。

8、使用静态库必须添加#define GOOGLE_GLOG_DLL_DECL。动态库不必添加。

9、因windows.h中定义的宏ERROR,与glog中定义的宏ERROR冲突,所以如果#include <windows.h>后要添加#define GLOG_NO_ABBREVIATED_SEVERITIES,并且代码中要用google::GLOG_ERROR来代替原来的google::ERROR,相应的其他也改为:GLOG_INFO、GLOG_WARNING、GLOG_FATAL。

10、添加库文件:#pragma comment(lib,"glog/libglog_static.lib")。针对Debug和Release版,用#ifdef控制。

#define GOOGLE_GLOG_DLL_DECL
#define GLOG_NO_ABBREVIATED_SEVERITIES

#include "glog/logging.h"
#ifdef DEBUG

#pragma comment(lib,"glog/libglog_static_d.lib")

#else
     #pragma comment(lib,"glog/libglog_static.lib")
 #endif // DEBUG

11、自己的工程使用静态库时,必须选择“多线程”或“多线程调试”。使用动态库则选择“多线程DLL”或“多线程调试DLL”。

12、使用glog之前必须先初始化库,要生成日志文件只需在开始log之前调用一次:

google::InitGoogleLogging(argv[0]);  //括号内是程序名

13、设置日志文件保存目录,这个目录必须是已经存在的,否则不能生成日志文件。必须在初始化库之前调用。

FLAGS_log_dir = "c:\\Logs";

14、GLOG 有四个错误级别,枚举如下:

enum SeverityLevel
{
google::INFO = 0,
google::WARNING = 1,
google::ERROR = 2,
google::FATAL = 3,
};

15、输出日志:

LOG(INFO) << "info test";  //输出一个Info日志
LOG(WARNING) << "warning test";  //输出一个Warning日志
LOG(ERROR) << "error test";  //输出一个Error日志
LOG(FATAL) << "fatal test";  //输出一个Fatal日志,这是最严重的日志并且输出之后会中止程序

16、条件输出:

LOG_IF(INFO, num_cookies > 10) << "Got lots of cookies";  //当条件满足时输出日志

LOG_EVERY_N(INFO, 10) << "Got the " << google::COUNTER << "th cookie";  //google::COUNTER 记录该语句被执行次数,从1开始,在第一次运行输出日志之后,每隔 10 次再输出一次日志信息

LOG_IF_EVERY_N(INFO, (size > 1024), 10) << "Got the " << google::COUNTER << "th big cookie";  //上述两者的结合,不过要注意,是先每隔 10 次去判断条件是否满足,如果滞则输出日志;而不是当满足某条件的情况下,每隔 10 次输出一次日志信息

LOG_FIRST_N(INFO, 20) << "Got the " << google::COUNTER << "th cookie";  //当此语句执行的前 20 次都输出日志,然后不再输出

17、几个函数:

google::SetLogDestination(google::GLOG_INFO, "log/prefix_");  //设置特定严重级别的日志的输出目录和前缀。第一个参数为日志级别,第二个参数表示输出目录及日志文件名前缀

google::SetLogFilenameExtension("logExtension");  //在日志文件名中级别后添加一个扩展名。适用于所有严重级别

google::SetStderrLogging(google::GLOG_INFO);  //大于指定级别的日志都输出到标准输出

18、几个参数设置:

FLAGS_logtostderr = true;  //设置日志消息是否转到标准输出而不是日志文件

FLAGS_alsologtostderr = true;  //设置日志消息除了日志文件之外是否去标准输出

FLAGS_colorlogtostderr = true;  //设置记录到标准输出的颜色消息(如果终端支持)

FLAGS_log_prefix = true;  //设置日志前缀是否应该添加到每行输出

FLAGS_logbufsecs = 0;  //设置可以缓冲日志的最大秒数,0指实时输出

FLAGS_max_log_size = 10;  //设置最大日志文件大小(以MB为单位)

FLAGS_stop_logging_if_full_disk = true;  //设置是否在磁盘已满时避免日志记录到磁盘

19、Google日志库使用实例

几个比较简单的选项 :

1、里面有以FLAGS_ 开头的全局变量,可以代替以 GLOG_ 开头的环境变量,FLAGS_log_dir = "./"; //等效于设置环境变量 GLOG_log_dir = "./" ,而且前者优先级高。每个GLOG_开头的设置项都有对应的FLAGS_开头的全局变量,在程序记录日志前修改有效。

2、//设置日志文件路径,指定其基本名称

google::SetLogDestination(google::INFO,"./mylog_");//大于INFO级别的,记录在当前目录,文件以为mylog_前缀

google::SetLogDestination(google::ERROR,"");//不为ERROR建立日志文件

google::SetLogDestination(google::WARNING,"");

3、//其他配置

google::SetStderrLogging(google::INFO);//配置输出到标准错误输出的最低日记级别。

google::LogToStderr();//只输出到标准错误输出

测试代码如下。

#include <glog/logging.h>

int main(int argc, char* argv[])

{

//Initialize Google's logging library.

google::InitGoogleLogging(argv[0]);

google::SetLogDestination(google::INFO,"./test_log/");//大于INFO级别的,日志文件放在当前路径的test_log文件夹下面。不设置的话默认在系统/tmp/下面,INFO, ERROR,WARNING按文件分开。

google::SetStderrLogging(google::INFO);//配置输出到标准错误输出的最低日记级别(输出了所有日志)

char lv[10] = "l loveyou";

int num_cookies = 10;

int addr = 34;

for(int i = 0; i < 5; ++i)

{

LOG(INFO) << "Found " << num_cookies+i<<":--->"<< lv<< " cookies";

LOG(WARNING) <<"warn 地址: "<<&addr;

LOG(ERROR) <<" value: "<<addr;

}

return 0;

}

如何使用Google日志库相关推荐

  1. libslog---高性能开源C/C++多线程安全日志库

    Fromwiki: https://code.google.com/p/easynetwork/wiki/libslog libslog是一个基于linux的高性能开源C/C++多线程安全日志库.Ea ...

  2. glog日志库使用笔记

    日志能方便地诊断程序原因.统计程序运行数据,是大型软件系统必不可少的组件之一.glog 是google的开源日志系统,相比较log4系列的日志系统,它更加轻巧灵活. 在Github上下载glog,解压 ...

  3. 发布一个适合服务端C++程序的高效日志库

    PPT 见 http://www.slideshare.net/chenshuo/efficient-logging-in-multithreaded-c-server/ 2012年6月30日在深圳的 ...

  4. java applog_Java Web App: 选择与配置日志库

    Java世界里,日志库就和许多其他库[1]一样,你有多个选择,多个还不错的选择,比如log4j, java.util.logging, logback, 另外还有一些统一的log api,比如slf4 ...

  5. go日志库log/zap/logrus

    一个好的日志记录器能够提供下面这些功能: 能够将事件记录到文件中,而不是应用程序控制台. 日志切割-能够根据文件大小.时间或间隔等来切割日志文件. 支持不同的日志级别.例如INFO,DEBUG,ERR ...

  6. glog --- C++日志库

    glog -- C++日志库 日志库glog glog安装 简单使用 默认输出 仅输出到标准输出 输出设置 输出目录设置 错误类型 条件输出 日志库glog 实现应用程序级日志记录的C++库. 项目地 ...

  7. 【Go进阶】如何让你Go项目中日志清晰有趣-Zap日志库

    本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. Zap日志库在Go语言项目中的使用 在许多Go ...

  8. Go 语言中的 logger 和 zap 日志库

    目录 Go 语言中的 logger 和 zap 日志库 Go Logger Zap Logger Logger Sugared Logger 定制 Logger 记录到文件中 Zap logger 中 ...

  9. go.uber.org/zap日志库

    文章目录 go.uber.org/zap日志库 1.GO SDK里Logger优缺点 2.介绍Uber-go zap 3.安装zap依赖 4.zap.NewProductionEncoderConfi ...

  10. 日志库glog之如何用cmake将源码生成.sln文件

    glog是google提供的一个开源的C++日志库.由于最新的glog源码工程中,已经移除了".sln"文件,代之以"a CMake build system" ...

最新文章

  1. GOF23设计模式(创建型模式)单例模式
  2. 关于java和c的选择结构和循环结构
  3. Microsoft training Kits
  4. JVM第三篇 — JVM是怎么工作的?
  5. 【FFmpeg】ffmpeg 命令查询二 ( 比特流过滤器 | 可用协议 | 过滤器 | 像素格式 | 标准声道布局 | 音频采样格式 | 颜色名称 )
  6. 操作系统概念学习笔记 11 进程同步(一)
  7. 《移动优先与响应式Web设计》一1.2 设备不同,功能不同
  8. 在AD中恢复误删除的对象
  9. sed修炼系列(三):sed高级应用之实现窗口滑动技术
  10. ps2018 html面板,28组经典PS 2018插件合集
  11. 计算机控制课设串级回路,计算机控制系统课程设计
  12. bme java_为什么bme280.startreadout()只触发一次?
  13. 科学计算机符号大全,计算机符号代码大全
  14. linux网络重设,Linux ADSL拨号上网
  15. html盒子移动动画代码,js实现盒子移动动画效果
  16. 流体力学基础——流体静力学
  17. 全球与中国户外楼梯升降机市场现状及未来发展趋势
  18. 泰安旱稻安家增收 国稻种芯·中国水稻节:山东穿布鞋种水稻
  19. Pytorch cuda out of memory
  20. [笔记][java 4 android] [028~034]接口、异常和I/O流

热门文章

  1. MySQL高可用之主备同步:docker-v挂载文件
  2. java 某种特殊的数列a1, a2, a3, ...的定义如下:a1 = 1, a2 = 2, ... , an = 2 * an ? 1 + an - 2 (n 2)。
  3. 中国移动极力发展固网宽带业务可以增强其整体竞争力
  4. 不仅致癌,更能致盲!长期吸烟,小心染上这5大眼疾
  5. Sequence Level Training with Recurrent Neural Networks-学习笔记
  6. 数据结构1.1基本概念以及时间复杂度的计算
  7. JDK8中HashMap依然会产生死循环问题,太香了
  8. 一级计算机office文字处理教程,2016年计算机一级《MSOffice》文字处理题冲刺
  9. 智过网:2023监理工程师网报流程整理如下!
  10. 深度学习工程师能力评估标准(Deep learning engineer capability evaluation standard)