C++ muduo日志库的使用

news2024/11/28 2:40:39

muduo日志库的使用

  • 一、引用
  • 二、使用方法
    • 2.1、引入头文件
    • 2.2、 启动日志库
    • 2.3、记录日志
    • 2.4、输出格式
    • 2.5、日志滚动
  • 三、总结

一、引用

muduo是一个高性能的网络库,它的日志库采用了异步、多线程的方式来记录日志,其主要特点包括:

  • 能够按大小和时间自动分裂文件。
  • 支持同步和异步日志输出。
  • 支持日志级别控制。
  • 支持多线程安全。

二、使用方法

下面介绍一下muduo日志库的使用方法。

2.1、引入头文件

#include <muduo/base/Logging.h>

2.2、 启动日志库

在程序入口处调用下面的语句启动日志库:

Logger::setLogLevel(Logger::INFO); // 设置日志级别为INFO
LOG_INFO << "logging started";

2.3、记录日志

通过宏定义LOG_XX来记录日志,其中XX表示不同的日志级别,常见的日志级别有:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL(致命错误)

例如:

LOG_TRACE << "trace message";
LOG_DEBUG << "debug message";
LOG_INFO << "info message";
LOG_WARN << "warning message";
LOG_ERROR << "error message";
LOG_FATAL << "fatal error message";

2.4、输出格式

muduo日志库支持输出格式的自定义,下面是一个简单的例子:

void outputFunc(const char* msg, int len)
{
  fwrite(msg, 1, len, stdout);
}

void flushFunc()
{
  fflush(stdout);
}

int main(int argc, char* argv[])
{
  Logger::setOutput(outputFunc);
  Logger::setFlush(flushFunc);
  Logger::setLogLevel(Logger::TRACE);

  LOG_TRACE << "trace message";
  LOG_DEBUG << "debug message";
  LOG_INFO << "info message";
  LOG_WARN << "warning message";
  LOG_ERROR << "error message";
  LOG_FATAL << "fatal error message";
}

在上面的例子中,通过Logger::setOutput()和Logger::setFlush()函数分别设置了日志输出函数和刷新函数。默认情况下,muduo会将日志输出到标准错误输出(stderr)。

2.5、日志滚动

muduo日志库支持按文件大小或时间进行日志滚动。下面是一个例子:

#include <muduo/base/LogFile.h>

void outputFunc(const char* msg, int len)
{
  g_logFile->append(msg, len);
}

int main(int argc, char* argv[])
{
  muduo::LogFile logFile("test_log", 500*1000); // 文件大小为500KB
  g_logFile = &logFile;

  Logger::setOutput(outputFunc);
  Logger::setLogLevel(Logger::TRACE);

  LOG_INFO << "logging started";

  for (int i = 0; i < 100000; ++i)
  {
    LOG_INFO << "hello world " << i;
  }
}

在上面的例子中,我们通过muduo::LogFile类来实现按文件大小滚动日志。其中,第一个参数表示日志文件名,第二个参数表示文件大小限制(单位为字节)。如果一个日志文件达到了限制大小,就会自动创建一个新的日志文件。

三、总结

muduo日志库是一个高性能、易于使用的日志库,它的异步、多线程特性使得它非常适合在高并发环境下使用。通过上面的介绍,相信已经掌握了muduo日志库的基本使用方法。

在这里插入图片描述

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

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

相关文章

使用Pano2VR实现全景图切换和平面图效果

内容简介 本文在文章《使用Pano2VR实现背景音乐、放大/缩小、旋转、缩略图和直线/立体/鱼眼模式等》基础上&#xff0c;增加全景图切换和平面图效果&#xff1b;效果如下图&#xff08;为了可以上传缩小屏幕&#xff0c;属于PC端运行&#xff09;&#xff1a; 实现过程 1. 运行…

【Bus】编写一个Demo虚拟的总线-设备-驱动模型

文章目录 1. 前言2. 总线驱动模型三要素2.1 总线2.2 设备2.3 驱动 3. Demo Code3.1 virt_bus_core.c3.2 virt_device.c3.3 virt_driver.c 4. 工程代码下载地址5. 参考资料 1. 前言 Linux平台为了驱动的可重用性&#xff0c;虚拟了很多的虚拟总线。很经典的就是platform总线&am…

Android Room数据库如何使用增删改查

先看运行效果图。 1.在app下的build.gradle。在dependencies{}闭包中添加如下依赖 //roomdef room_version "2.3.0"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version&q…

爱奇艺DRM修炼之路

01 DRM的定义和作用 DRM&#xff0c;即数字版权管理&#xff08;digital rights management&#xff09;&#xff0c;是在数字内容交易过程中&#xff0c;对知识产权进行保护的技术、工具和处理过程。它的目的是防止数字内容被未经授权的用户复制、修改和分发&#xff0c;以保护…

解读TaskMatrix.AI

ChatGPT在广泛的开放域任务上展现出令人瞩目的强大对话、上下文学习和代码生成能力&#xff0c;而且它所获得的常识知识还可以为特定领域的任务生成高级解决方案概要。不过&#xff0c;除了更强大的学习、理解和生成能力&#xff0c;ChatGPT还有哪些问题需要解决呢&#xff1f;…

《利用光体积描记图信号的模糊递推特性估计无袖带血压的级联卷积神经网络模型》阅读笔记

目录 一、论文摘要 二、论文十问 Q1&#xff1a;论文试图解决什么问题&#xff1f; Q2&#xff1a;这是否是一个新的问题&#xff1f; Q3&#xff1a;这篇文章要验证一个什么科学假设&#xff1f; Q4&#xff1a;有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一…

城市的智能进化,汇成数字中国的璀璨银河

著名城市规划理论家刘易斯芒福德在《城市发展史——起源、演变和前景》中提出&#xff0c;“城市从其起源时代开始便是一种特殊的构造&#xff0c;它专门用来储存并流传人类文明的成果。这种构造致密而紧凑&#xff0c;足以用最小的空间容纳更多的设施。” 他认为&#xff0c;城…

我们如何将 Amazon Snowcone 送入轨道

我从 4 或 5 岁起就一直是太空旅行和美国太空计划的粉丝。我记得读过关于水星和双子星座计划的文章&#xff0c;兴奋地看着鹰号登月舱降落在月球上。 如今&#xff0c;随着每次发射到达近地轨道 (LEO) 的成本似乎都在不断下降&#xff0c;因此有比以往任何时候都要更多的机会&…

建设元宇宙基础设施——PPIO边缘云在云渲染/云游戏的思考和实践

关于“元宇宙”的讨论越发火热&#xff0c;而建设元宇宙不可避免需要布设基础设施&#xff0c;LiveVideoStackCon 2022 北京站邀请到PPIO边缘云联合创始人——王闻宇&#xff0c;同大家探讨元宇宙网络时延的最优解–边缘云基础设施的架构与建设&#xff0c;并介绍PPIO边缘云在泛…

Kafka Broker是如何基于Reactor模式来处理海量用户请求的?

介绍 https://kafka.apache.org/0110/documentation.html 参数名描述默认值queued.max.requestsbroker全局唯一的请求队列&#xff0c;用来保存请求500num.io.threads用来处理请求的线程数8 参考博客 [1]

Python环境设置

在了解Python语言的历史和介绍之后&#xff0c;要想开始学习Python语言&#xff0c;还需要在计算机中安装Python编译环境&#xff0c;本期就来聊聊怎么在计算机中安装Python环境。 在计算机中添加Python环境的几种选择&#xff1a; 直接安装Python程序&#xff0c;即Python官…

Spring Boot配置文件

日升时奋斗&#xff0c;日落时自省 目录 1、配置文件作用 2、配置文件格式 2.1、使用注意 3、properties配置文件 3.1、注释中文问题 3.2、properties语法格式 3.3、读取配置文件 3.3.1、Value读取 3.3.2、PropertySource读取 3.3.3、原生方式读取配置文件 3.4、pr…

C++-FFmpeg-1-VS2019-x264-fdk_aac-x265-pdb-QT5.14-makefile

1.环境搭建&#xff1a; 1.1VS2019 用的是控制台编译。 1.2.msys2 模拟linux的命令和指令。 2.源码编译与安装&#xff1a; 2.1.x264: ffmpeg :编码用X264 2.2x265: ffmpeg :编码用X265 c写的。msys2编译。 2.3.fdk-aac 音频编码。 2.4 ffmpeg源码4.3: 2.5.SDL2.0 视频渲…

ESP8266_RTOS_SDK之SPIFFS

需要在ESP8266的FLASH中存储一些可变参数&#xff0c;有两种方式&#xff0c;一种是调用SPI Flash API直接指定地址读写FLASH&#xff1b;二是在SPI FLASH上创建一块SPIFFS 分区&#xff0c;以读写文件的形式存取数据。 下面记录第二种方式&#xff0c;使用SPIFFS文件系统存取…

干货 | Elasticsearch 8.X 性能优化实战

Elasticsearch 是实现用户无缝搜索体验的关键工具。它通过提供快速、准确和相关的搜索结果&#xff0c;彻底改变了用户与应用程序的互动方式。然而&#xff0c;要确保 Elasticsearch 部署达到最佳性能&#xff0c;就必须关注关键指标&#xff0c;并对诸如索引、缓存、查询、搜索…

【计算机图形学】课堂习题汇总

在直线的光栅化算法中&#xff0c;如果不考虑最大位移方向则可能得到怎样的直线&#xff1f; A&#xff1a;斜率为1的线 B&#xff1a;总是垂直的 C&#xff1a;离散的点&#xff0c;无法构成直线 D&#xff1a;总是水平的 在直线的改进的Bresenham算法中&#xff0c;每当误…

Qt音视频开发42-网络推流(视频推流/本地摄像头推流/桌面推流/网络摄像头转发推流等)

一、前言 上次实现的文件推流&#xff0c;尽管优点很多&#xff0c;但是只能对现在存在的生成好的音视频文件推流&#xff0c;而现在更多的场景是需要将实时的视频流重新推流分发&#xff0c;用户在很多设备比如手机/平板/网页/电脑/服务器上观看&#xff0c;这样就可以很方便…

IP-GUARD如何通过流量控制策略限制客户端下载文件?

如何通过流量控制策略限制客户端下载文件? 可通过流量控制策略限制接收流量上限速度,实现控制客户端下载文件效果。流量控制支持网络地址和端口范围限制。 网络流量统计能否基于用户进行统计? 目前最新的客户端版本已经支持控制应用程序的网络流量,在应用层实现了控制…

专利进阶(二):专利撰写常用技术及算法汇总(持续更新中)

文章目录 一、前言二、常用技术及算法2.1 区跨链技术2.2 聚类算法2.3 边缘算法2.4 蚁群算法2.4.1 路径构建2.4.2 信息素更新 2.5 哈希算法2.5.1 常见算法 2.6 数字摘要2.72.82.92.10 三、拓展阅读 一、前言 专利撰写过程中使用已有技术或算法解决新问题非常常见&#xff0c;本…

基于SpringBoot的冬奥会科普平台

摘 要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理平台应运而生&#xff0c;各行各业相继进入信息管理时代&…