【C++】开源:glog日志库配置使用
😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍glog日志库配置使用。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞
文章目录
- :smirk:1. 项目介绍
- :blush:2. 环境配置
- :satisfied:3. 使用说明
😏1. 项目介绍
项目Github地址:https://github.com/google/glog
glog(Google Logging Library)是由 Google 开发的 C++ 日志库。它提供了一个简单易用的接口,用于在应用程序中记录日志消息。glog 被设计为高效、可靠和线程安全的,可以广泛应用于各种 C++ 项目中。
下面是 glog 的一些主要特点和优势:
1.简单易用的接口:glog 提供了简洁明了的 API,使得开发人员可以轻松地在应用程序中记录日志消息。通过使用 LOG(INFO)、LOG(ERROR) 等宏,可以方便地输出不同级别的日志信息。
2.多级别日志:glog 支持不同级别的日志记录,包括 INFO、WARNING、ERROR、FATAL 等。通过配置日志级别,可以控制记录哪些级别及以上的日志消息。
3.日志格式化:glog 允许开发人员自定义日志消息的格式。它支持类似于 printf 的格式化字符串,可以添加变量、时间戳等信息到日志消息中。
4.完整的调用栈:glog 可以记录完整的调用栈信息,包括文件名、行号和函数名。这对于定位和调试问题非常有帮助。
5.后台线程写入:glog 使用后台线程异步写入日志文件,避免了频繁的磁盘 I/O 操作对应用程序性能的影响。
6.日志文件分割:glog 具有自动分割日志文件的功能,可以按照时间或大小进行日志文件的切换和轮转,避免了日志文件过大的问题。
7.线程安全:glog 被设计为线程安全的,可以在多线程环境中使用,而不会产生竞争条件或死锁。线程安全是通过内部使用互斥锁(mutex)来实现的。
8.支持日志级别过滤:glog 支持根据日志级别设置过滤规则,可以控制输出哪些级别的日志消息到终端或文件。
glog 是一个简单易用、高效可靠的 C++ 日志库。它具有多级别日志记录、格式化、完整调用栈、后台线程写入、日志文件分割等功能。
😊2. 环境配置
下面进行环境配置:
# apt安装
sudo apt install libgoogle-glog-dev# 源码安装
git clone https://github.com/google/glog.git
cd glog
mkdir build && cd build
cmake ..
make && sudo make install
编译运行:
g++ -o main main.cpp -lglog && ./main
😆3. 使用说明
下面进行使用分析:
glog基本使用示例:
#include <glog/logging.h>int main(int argc, char *argv[])
{// 初始化 Google Logging Library , argv[0] 是当前程序的名称google::InitGoogleLogging(argv[0]);// 设置日志输出目录FLAGS_log_dir = "./logs";// 标准错误输出FLAGS_logtostderr = true;// 设置日志级别,INFO 级别及以上的日志会被输出FLAGS_minloglevel = google::INFO;// 使用宏输出不同级别的日志LOG(INFO) << "This is an INFO level log.";LOG(WARNING) << "This is a WARNING level log.";LOG(ERROR) << "This is an ERROR level log.";// LOG(FATAL) << "This is a FATAL level log."; // 会使程序abortreturn 0;
}
// result:
// I0811 11:25:20.819756 24411 main.cpp:18] This is an INFO level log.
// W0811 11:25:20.819849 24411 main.cpp:19] This is a WARNING level log.
// E0811 11:25:20.819866 24411 main.cpp:20] This is an ERROR level log.

以上。
相关文章:
【C++】开源:glog日志库配置使用
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍glog日志库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…...
使用 React Native CLI 创建项目
React Native 安装的先决条件和设置 需要掌握的知识点 掌握 JavaScript 基础知识掌握 React 相关基础知识掌握 TypeScript 相关基础知识 安装软件前需要首先安装Chocolatey。Chocolatey 是一种流行的 Windows 包管理器。 安装 nodejs 和 JDK choco install -y nodejs-lts …...
在R中将列表(list)转换为向量(vector)
问题:将列表中的所有元素“展平”,赋值给一个向量 解决方案:使用unlist()函数; 在许多情况下需要向量,例如,baseR中的许多统计函数需要一个向量作为输入,例如,如果iq.score是一个包…...
access怎么做进销存?借助access开发进销存管理应用
我不太推荐使用Access,因为他的缺点还是比较明显的: 1、软件自身限制 不能用于互联网:使用Access制作好的管理软件,访问页只能在局域网中使用;只能在Windows上运行:Access仅支持windows的运行环境&#x…...
css实现卡片的左上角有一个三角形的遮盖效果
需求: 卡片的左上角有一个绿色的三角形标签,用来区分状态 实现: .vCard{position: relative;overflow: hidden; } .vCard::before {content: "";position: absolute;top: 0;left: 0;width: 0;height: 0;border-bottom: 20px solid transparent;border-left: 20px …...
中间件RabbitMQ消息队列介绍
1. MQ的相关概念 1.1 什么是MQ MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息…...
MySQL不知道密码,直接修改密码
很简单,我们跳过验证,直接进去修改就好 修改配置文件 vim /etc/my.cnf在[mysqld]下直接添加配置 skip-grant-tables如图: 保存,退出即可。 重启服务 service mysqld restart进入MySQL #(直接点击回车,密码为空)…...
Win10关闭自动更新的方法和影响(Windows modules installer worker cpu占用过高)
目录 问题描述: Windows modules installer worker是什么? Win10关闭自动更新的方法: Win10关闭自动更新的影响: 问题描述: 有时我们在使用电脑的过程中会突然出现电脑运行过慢,发热,风扇噪…...
Xcode 基座打包
Xcode基座打包-APP更新版本内容无效 问题:解决: 问题: 使用xcode基座打包之后,上传到appstore进行提审发布。 用户在appstore商城进行更新下载,打开更新后的APP发现版本号是最新的,APP里面的其他内容还是上…...
最强自动化测试框架Playwright(9)- 下载文件
对于页面下载的每个附件,都会发出 page.on(“download”) 事件。 下载开始后,将发出下载事件。下载完成后,下载路径将变为可用 所有这些附件都下载到一个临时文件夹中。可以使用事件中的下载对象获取下载 URL、文件系…...
python爬虫实战(1)——网站小说
整本小说的爬取保存 目标大致思路页面的爬取解析—XPath请求网页内容解析网页内容正文爬取与解析单个页面数据获取爬取所有页面 数据清洗 经过学习基础,我们学以致用一下子,爬取小说,注意这个小说本身是免费的哦,以后再进阶。 本次…...
git: ‘lfs‘ is not a git command. see ‘git --help‘
在克隆hugging face里面的项目文件的时候,需要用到git lfs,本文介绍安装git lfs方法 在Ubuntu下 curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash sudo apt-get install git-lfs在Windows下 到这个链…...
python案例
这猜单词游戏。具体步骤如下: 导入random模块,用于随机选择单词。 设置初始生命次数为3。 创建一个单词列表words,其中包含了一些单词。 使用random.choices()函数从单词列表中随机选择一个单词作为秘密单词secret_word。 创建一个clue列表&a…...
leetcode 63. 不同路径 II
2023.8.9 这题是不同路径I的升级版,在路径上增加了障碍物,有障碍物的地方无法通过。 我的思路依然还是使用动态规划,dp[i][j]的含义依然是到(i,j)这个位置的路径个数。只需要在dp数组中将有障碍物的地方赋为…...
c语言每日一练(5)
前言:每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情…...
pycharm配置conda虚拟环境
📕作者简介:热编程的贝贝,致力于C/C、Java、Python等多编程语言,热爱跑步健身,喜爱音乐的一位博主。 📗本文收录于贝贝的日常汇报系列,大家有兴趣的可以看一看 📘相关专栏深度学习、…...
ubuntu 如何命令行打开系统设置(Wifi,网络,应用程序...)
关于GNOME GNOME 是一个自由、开放源代码的桌面环境,它运行在 Linux 和其他类 UNIX 操作系统上。它是 GNU 项目的一部分,旨在为 Linux 操作系统提供一个现代化、易于使用的用户界面。 GNOME 桌面环境包括许多应用程序,例如文件管理器、文本编…...
MySQL DQL 数据查询
文章目录 1.SELECT 语句2.SELECT 子句3.FROM 子句4.WHERE 子句5.GROUP BY 子句6.HAVING 子句7.ORDER BY 子句8.LIMIT 子句9.DISTINCT 子句10.JOIN 子句11.UNION 子句12.查看数据表记录数13.检查查询语句的执行效率14.查看 SQL 执行时的警告参考文献 1.SELECT 语句 MySQL 的 SE…...
深度学习基础知识笔记
深度学习要解决的问题 1 深度学习要解决的问题2 应用领域3 计算机视觉任务4 视觉任务中遇到的问题5 得分函数6 损失函数7 前向传播整体流程8 返向传播计算方法1 梯度下降 9 神经网络整体架构11 神经元个数对结果的影响12 正则化和激活函数1 正则化2 激活函数 13 神经网络过拟合…...
怎么系统的学习机器学习、深度学习?当然是看书了
目录 前言 内容简介 学完本书,你将能够 作者简介 本书目录 京东自购链接 前言 近年来,机器学习方法凭借其理解海量数据和自主决策的能力,已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。自从Ale…...
AUTOSAR 架构如何赋能汽车功能安全:机制、实战与代码实现【深度长文】
目录 核心前提:功能安全与AUTOSAR的核心关联 第一部分:AUTOSAR 架构赋能汽车功能安全的核心机制(底层逻辑全解析) 1.1 硬件层:功能安全的物理基础(故障防护的第一道防线) 1.1.1 硬件冗余设计(适配ASIL C/D级要求) 1.1.2 硬件故障检测与上报机制 1.1.3 硬件级安全…...
从Drupal后台到Root权限:手把手复现DC-8靶场的Exim 4.89提权完整流程
从Drupal后台到Root权限:手把手复现DC-8靶场的Exim 4.89提权完整流程 在渗透测试的学习过程中,靶机环境是最接近实战的训练场。DC-8作为VulnHub上经典的Drupal靶机,提供了一个从Web漏洞到系统提权的完整攻击链。本文将深入剖析如何从Drupal 7…...
别再搞混了!Ubuntu 20.04上安装linux-headers-generic和指定版本有啥区别?
深度解析Ubuntu内核头文件管理:generic元包与指定版本的选择策略 每次内核升级后重新编译驱动时,总会遇到那个经典问题——该用linux-headers-generic还是精确版本号安装?上周帮同事排查一个WiFi驱动兼容性问题时,发现他系统里同…...
【地质】一维层状模型大地电磁测深 (MT) 和可控源音频大地电磁测深 (CSAMT) 正演计算研究附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…...
从LeGO-LOAM到FAST-LIO2:Patchwork地面分割如何提升SLAM建图与定位精度?
Patchwork地面分割算法在激光SLAM中的实战优化:从原理到性能提升 激光雷达SLAM技术正面临复杂环境下的新挑战——如何从海量点云中快速准确地分离地面点,成为提升建图与定位精度的关键。传统均匀网格划分方法在远距离区域容易失效,而Patchwor…...
别再死记硬背了!用PyTorch手把手复现Faster R-CNN,搞懂RPN和RoI Pooling到底怎么用
从零实现Faster R-CNN:代码级解析RPN与RoI Pooling核心机制 在计算机视觉领域,目标检测一直是极具挑战性的任务。传统方法依赖手工设计特征,而深度学习时代的目标检测算法则通过端到端训练实现了质的飞跃。Faster R-CNN作为两阶段检测器的经典…...
python argon2
## 关于 Python 中的 Argon2:一个密码哈希的现代选择 如果你写过需要处理用户密码的代码,肯定知道不能把密码原文存进数据库。早年很多系统用 MD5 或 SHA-1 这类快速哈希算法,后来大家发现这不够安全——显卡能每秒算几十亿次哈希,…...
告别mstsc!用C# WinForm打造一个专属的远程桌面管理工具(支持Win11)
用C# WinForm构建企业级远程桌面管理工具 每次打开Windows自带的远程桌面连接工具mstsc,面对那个简陋的界面和每次都要重复输入的服务器信息,作为.NET开发者的你是否感到效率低下?本文将带你从零开始,用C# WinForm打造一个功能强大…...
别再死记硬背了!用‘头歌’实战项目,5分钟搞懂Java数组的声明、赋值与遍历
用实战项目解锁Java数组:从零构建学生成绩分析系统 很多Java初学者在第一次接触数组时,常常陷入"学完就忘"的困境。传统的语法点逐个讲解方式,虽然逻辑清晰,却难以让学习者真正理解数组在实际开发中的应用场景。本文将带…...
Visual C++运行库一键修复终极方案:告别DLL缺失与程序启动失败
Visual C运行库一键修复终极方案:告别DLL缺失与程序启动失败 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库是Windows系统运行C程序的…...
