C++日志库 glog入门

glog(Google Logging Library)是由Google开源的一款C++日志库,用于方便地记录日志信息。它支持四个级别的日志(INFO、WARNING、ERROR、FATAL),并且可以将日志输出到文件和控制台,方便调试和问题追踪。以下是如何使用glog的详细说明。

安装glog

使用包管理器安装(例如在Ubuntu上)

sudo apt-get install libgoogle-glog-dev

从源码编译安装

git clone https://github.com/google/glog.git
cd glog
mkdir build
cd build
cmake ..
make
sudo make install

使用示例
以下是一个简单的示例,演示了如何在C++程序中使用glog:

示例代码

#include <glog/logging.h>int main(int argc, char* argv[]) {// 初始化gloggoogle::InitGoogleLogging(argv[0]);// 设置日志文件保存位置google::SetLogDestination(google::INFO, "./log_info_");google::SetLogDestination(google::WARNING, "./log_warning_");google::SetLogDestination(google::ERROR, "./log_error_");google::SetLogDestination(google::FATAL, "./log_fatal_");// 输出不同级别的日志信息LOG(INFO) << "This is an info message.";LOG(WARNING) << "This is a warning message.";LOG(ERROR) << "This is an error message.";// LOG(FATAL) << "This is a fatal message."; // 会导致程序退出// 条件日志int x = 10;LOG_IF(INFO, x > 5) << "x is greater than 5.";// 检查宏CHECK_EQ(x, 10) << "x should be 10.";// 关闭gloggoogle::ShutdownGoogleLogging();return 0;
}

使用CMake构建项目
如果你使用CMake构建项目,可以通过以下方式将glog集成到你的项目中:

CMakeLists.txt 示例

cmake_minimum_required(VERSION 3.10)
project(MyGlogProject)# 查找glog库
find_package(glog REQUIRED)# 添加可执行文件
add_executable(MyGlogProject main.cpp)# 链接glog库
target_link_libraries(MyGlogProject glog::glog)

glog的高级特性
设置日志选项

你可以通过修改glog的标志变量来定制日志行为。例如:

#include <glog/logging.h>int main(int argc, char* argv[]) {google::InitGoogleLogging(argv[0]);// 设置日志级别FLAGS_minloglevel = google::INFO;// 输出日志到stderrFLAGS_logtostderr = 1;LOG(INFO) << "This is an info message.";LOG(WARNING) << "This is a warning message.";LOG(ERROR) << "This is an error message.";google::ShutdownGoogleLogging();return 0;
}

用户自定义日志记录器
你可以设置自定义的日志记录器,以便自定义日志输出行为。例如:

#include <glog/logging.h>void MyLogHandler(const char* data, int size) {std::cout.write(data, size);std::cout << std::endl;
}int main(int argc, char* argv[]) {google::InitGoogleLogging(argv[0]);// 设置自定义日志记录器google::AddLogSink(new google::LogSinkAdapter(MyLogHandler));LOG(INFO) << "This is an info message.";LOG(WARNING) << "This is a warning message.";LOG(ERROR) << "This is an error message.";google::ShutdownGoogleLogging();return 0;
}

常用glog宏和函数

日志级别宏

  • LOG(INFO): 输出INFO级别的日志。
  • LOG(WARNING): 输出WARNING级别的日志。
  • LOG(ERROR): 输出ERROR级别的日志。
  • LOG(FATAL): 输出FATAL级别的日志,输出后程序会终止。

条件日志宏

  • LOG_IF(INFO, condition): 当condition为true时,输出INFO级别的日志。
  • LOG_IF(WARNING, condition): 当condition为true时,输出WARNING级别的日志。
  • LOG_IF(ERROR, condition): 当condition为true时,输出ERROR级别的日志。

检查宏

  • CHECK(condition): 如果condition为false,输出FATAL级别的日志,并终止程序。
  • CHECK_EQ(val1, val2): 如果val1 != val2,输出FATAL级别的日志,并终止程序。
  • CHECK_NE(val1, val2): 如果val1 == val2,输出FATAL级别的日志,并终止程序。
  • CHECK_LT(val1, val2): 如果val1 >= val2,输出FATAL级别的日志,并终止程序。
  • CHECK_LE(val1, val2): 如果val1 > val2,输出FATAL级别的日志,并终止程序。
  • CHECK_GT(val1, val2): 如果val1 <= val2,输出FATAL级别的日志,并终止程序。
  • CHECK_GE(val1, val2): 如果val1 < val2,输出FATAL级别的日志,并终止程序。

通过使用glog,你可以轻松地在C++项目中添加功能强大的日志记录,帮助你更好地进行调试和问题追踪。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/28899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Aeron:两个代理之间的单向IPC(One-way IPC between two agents)

一、概述 本例展示了如何通过 IPC 在调度于不同线程的两个代理之间传输缓冲区。在继续学习本示例之前&#xff0c;最好先复习一下Simplest Full Example &#xff0c;因为该示例展示的是 IPC 通信&#xff0c;没有增加代理的复杂性。读者还应熟悉Media Driver 流程构建如下&…

学习笔记——路由网络基础——路由优先级(preference)

1、路由优先级(preference) 路由优先级(preference)代表路由的优先程度。当路由器从多种不同的途径获知到达同一个目的网段的路由(这些路由的目的网络地址及网络掩码均相同)时&#xff0c;路由器会比较这些路由的优先级&#xff0c;优选优先级值最小的路由。 路由来源的优先…

Glide 缓存机制研究及同命名图片的替换回显

背景&#xff1a; 相册-图片后处理场景&#xff0c;需要先展示一张原图&#xff0c;同时后台对图片进行算法优化&#xff0c;完成优化之后无缝替换原图展示&#xff0c;同时保证后续都展示算法优化后的图片 图片加载采用 Glide 库实现 画重点&#xff1a; 相册场景&#xff…

编程之道:程序员必备的五大职业素养

引言 在数字化时代&#xff0c;程序员的角色变得日益重要。他们不仅是代码的编写者&#xff0c;更是技术变革的推动者。然而&#xff0c;成为一名优秀的程序员&#xff0c;除了技术能力之外&#xff0c;还需要具备一系列职业素养。本文将探讨程序员在职业生涯中应具备的五大职业…

pycharm git配置

PyCharm 是一个强大的集成开发环境(IDE),它内置了 Git 集成,使得版本控制变得非常方便。以下是 PyCharm 中配置 Git 的基本步骤: 安装Git: 在开始之前,请确保已经在您的系统上安装了 Git。您可以通过官方网站下载并安装 Git。本系统用的是Git-2.29.2.2-64-bit 。 打开PyC…

24年下半年安徽教资认定准确时间和流程

安徽教资认定准确时间 网上报名时间&#xff1a; 第一批次&#xff1a;4月8日至4月19日17时 第二批次&#xff1a;6月17日至6月28日17时 注意&#xff1a;符合安徽省申请条件的普通大中专院校2024届全日制毕业生&#xff0c;应统一选择6月17日至6月28日17时的时间段进行网上报名…

vivado在implementation时出现错误[Place 30-494] The design is empty的一个可能原因和解决方法

在查询类似帖子时我发现这一问题是由于在设计实现时vivado认为没有输出端口所以报错。 于是在.v文件中我添加了一个随意的端口&#xff0c;并且在.xdc文件中为它分配了管脚 这样做的确可以让设计实现的过程顺利进行&#xff0c;但是会发现在summary中&#xff0c;设计实现的…

2024年6月17日 (周一) 叶子游戏新闻

期刊杂志: 聚合读者、意林、知音、故事会、花火以及国内各大知名报纸电子版&#xff0c;无需付费即可观看各种免费资源 中医自学宝典: 集合了中医医案&#xff0c;医经&#xff0c;方剂 药材知识的app&#xff0c;更方便的免费学习中医知识 《最终幻想7》重制三部曲总监鸟山求&…

每日复盘-202406017

今日关注&#xff1a; 20240617 六日涨幅最大: ------1--------301036--------- 双乐股份 五日涨幅最大: ------1--------301176--------- 逸豪新材 四日涨幅最大: ------1--------300868--------- 杰美特 三日涨幅最大: ------1--------301082--------- 久盛电气 二日涨幅最大…

阿里巴巴全球数学竞赛

都是很贴近生活的数学题&#xff0c;你来试试&#xff1f; 数学到底有没有用&#xff1f;华人数学家张益唐&#xff1a;数学很重要&#xff01; 在学校里辛辛苦苦学了那么多年&#xff0c;毕业后发现并不实用。学好数学到底有没有用&#xff1f; 昨天上午&#xff0c;华人数学家…

springboot+vue+mybatis酒店房间管理系统+PPT+论文+讲解+售后

随着现在网络的快速发展&#xff0c;网络的应用在各行各业当中它很快融入到了许多商家的眼球之中&#xff0c;他们利用网络来做这个电商的服务&#xff0c;随之就产生了“酒店房间管理系统”&#xff0c;这样就让人们酒店房间管理系统更加方便简单。 对于本酒店房间管理系统的…

BRAVE:扩展视觉编码能力,推动视觉-语言模型发展

视觉-语言模型&#xff08;VLMs&#xff09;在理解和生成涉及视觉与文本的任务上取得了显著进展&#xff0c;它们在理解和生成结合视觉与文本信息的任务中扮演着重要角色。然而&#xff0c;这些模型的性能往往受限于其视觉编码器的能力。例如&#xff0c;现有的一些模型可能对某…

车企高管组团“出道”,汽车营销已经Next level了?

汽车进入了“卷”老板、“卷”高管的时代&#xff01; 谁能想到&#xff0c;雷军凭一己之力&#xff0c;在一定程度上重塑了汽车的竞争策略。价格战之外&#xff0c;车市又开启了流量之战。 云略曾在《雷军20天吸粉500w&#xff01;……》一文中&#xff0c;提到继雷军之后&…

爆肝整理AI Agent:在企业应用中的6种基础类型

AI Agent智能体在企业应用中落地的价值、场景、成熟度做了分析&#xff0c;并且探讨了未来企业IT基础设施与架构如何为未来Gen AI&#xff08;生成式AI&#xff09;做好准备。在这样的架构中&#xff0c;我们把最终体现上层应用能力的AI Agent从不同的技术要求与原理上分成了几…

【MySQL】分库分表

https://www.bilibili.com/video/BV1Kr4y1i7ru/?p163​ https://blog.csdn.net/qq_47959003/article/details/126058710 随着互联网及移动互联网的发展&#xff0c;应用系统的数据量也是成指数式增长&#xff0c;若采用单数据库进行数据存储&#xff0c;存在以下性能瓶颈&…

Java中线程的创建方式

一、继承Thread类&#xff0c;重写run方法 public class MyThread{public static void main(String[] args) {Thread threadDome new ThreadDome();threadDome.start();} }class ThreadDome extends Thread{Overridepublic void run() {for (int i 0; i < 5; i) {try {Th…

Java项目:基于SSM框架实现的汽车养护保养管理系统【ssm+B/S架构+源码+数据库+开题+毕业论文+任务书】

一、项目简介 本项目是一套基于SSM框架实现的汽车养护保养管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

Linux之逻辑控制符

Linux之逻辑控制符&& 用&&连接两个命令&#xff0c;前一个命令执行成功&#xff0c;才会执行后一个命令。&&此命令可以连接很多个 命令格式 command1 && command2 command1 && command2 && command3 command1 && co…

【机器学习】基于顺序到顺序Transformer机器翻译

引言 1.1 序列到序列模型详解 序列到序列(Seq2Seq)模型是深度学习中处理序列数据转换问题的关键架构。在自然语言处理(NLP)任务中&#xff0c;如机器翻译、文本摘要和聊天机器人等&#xff0c;Seq2Seq模型能够高效地将输入序列转换为期望的输出序列。 模型架构&#xff1a; 编…

宋街宣传活动-循环利用,绿色生活

善于善行回收团队是一支致力于推动环保事业&#xff0c;积极倡导和实践绿色生活的志愿者队伍。我们的宗旨是通过回收再利用&#xff0c;减少资源浪费&#xff0c;降低环境污染&#xff0c;同时提高公众的环保意识&#xff0c;共同构建美丽和谐的家园。 善于善行志愿团队于2024年…