muduo库学习-日志模块的学习以及C++日志模块封装

2023-11-04

前言

开发一款软件,一个好的日志库肯定是必不可少的,c++作为一门这么古老的开发语言,按理说应该有一些好用的日志库,但是在网上找到的那些日志库感觉用起来都不是很得心应手,因此就自己动手写了一个日志库,源码放在github上

我自己写的这个日志是参考muduo的日志模块开发的,下面我们首先介绍muduo日志库

muduo日志库的架构:

muduo日志库的类调用关系
Logger => Impl => LogStream => operator<< FixedBuffer => g_output => g_flush

在这里插入图片描述

muduo日志库类图

在这里插入图片描述
在这里插入图片描述

类的介绍
  • logger 用来接收写入的日志,同时对输出进行管理

  • loggstream 与Impl是组合的关系,logger类的成员有logstream类对象,用来流式格式化日志内容

  • fixedBuffer用来兼容muduo库自己的string和std::string

  • Impl类实际输入的类,与logger是组合的关系

  • logfile类用来管理日志写入文件相关的一些处理

我自己封装的logger介绍

使用方法
#include <stdio.h>
#include "CLogger.h"
#include <time.h>

int main()
{
	//printf("hello world!\n");

	CLogger::setLogFmtType(CLogger::LogFmtType::JSON);

	time_t now = time(nullptr);
	int i = 0;
	while(i<10000000)
	{
		LOG_DEBUG << "hello world!";
		i++;
	}
	time_t end = time(nullptr);
	int diff = end - now;
	
	std::cout << "diff:" << diff <<std::endl;

	return 0;
}

上面的例子是测试写入一千万条日志所用的时间,支持输出json和格式化的字符串两种类型的数据,具体的实现请移步github地址,如果觉得不错请给个星

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

muduo库学习-日志模块的学习以及C++日志模块封装 的相关文章

  • Math 对象

    Math 用于执行数学任务 不像 Date 和 String 那样是对象的类 因此没有构造函数 Math 方法 Math ceil 对小数进行上舍入 Math ceil 25 5 返回26 Math ceil 25 5 返回 25 Math
  • 如何使用百度baidu对某个特定网站进行站内搜索/检索

    很多网站自己提供了站内搜索 检索的功能 比如说GitHub或一些购物网站 但是也有很多网站并没有提供站内检索的功能 此时可以利用百度baidu对特定的网站进行检索 方法很简单 在要检索的关键字前加上inurl 和网址即可
  • 【Qt Creator快速入门第三版学习笔记】——第1章 Qt Creator简介

    第1章 Qt Creator简介 文章目录 第1章 Qt Creator简介 前言 1 1 Qt Creator的下载与安装 1 2Qt Creator环境介绍 1 2 1 主界面介绍 1 菜单栏 Menu Bar 2 模式选择器 Mode
  • ceres-solver库编译说明

    0 ceres solver简介 Ceres Solver是一个C 环境下的非线性最小二乘问题的求解工具包 可用来建模并解决大型复杂的非线性最小二乘问题 这个工具包已经广泛被用于很多商业软件中 在google project里面有它的主页

随机推荐

  • Oracle PL/SQL使用动态SQL

    动态SQL 意思是字符串的内容的内容当做SQL来执行 语法 execute immediate 字符串内容 execute 存储过程 参数 连接符 把左右两边的字符串的字符串连起来 合起来一个字符串 count 遇到的情况和对策 1 非查询
  • 集合框架集-List

    1 UML 统一建模语言 例如 类图 用例图等等 2 Collection接口 1 1 集合框架的顶级接口 1 2 是Set和List的父接口 1 3 但不是Map的父接口 集合中只能添加引用类型数据 Collection接口 是集合框架的
  • Unity3d Note5(鼠标打飞碟(Hit UFO)游戏)

    1 作业要求 2 具体设计 1 制备预制体作为飞碟 2 了解一下Singleton模板类 3 了解一下工厂模式 3 设计具体要实现的类 3 程序代码 成果视频 1 作业要求 编写一个简单的鼠标打飞碟 Hit UFO 游戏 游戏内容要求 游戏
  • Oracle 取出动态sql 执行的结果的两种方式

    以下是怎么取出动态sql执行结果的两种方式 第一种 直接 execute immediate insert into newTable id name select id name from dual 执行后 放到一个新的表里 第二种方式
  • JDBC、MAVEN概述

    1 什么是JDBC JDBC Java DataBase Connectivity Java数据库连接 其实就是 利用Java语言 程序连接并访问数据库的一门技术 之前我们可以通过CMD或者navicat等工具连接数据库 但在企业开发中 更
  • 本地访问远程web服务

    1 2 以管理员身份运行cmd ssh username remote address L 127 0 0 1 8888 127 0 0 1 8008 3 在远程服务器上去运行web服务 4 本地访问
  • 设置flex:1效果异常(父容器撑高/其它子元素高度缩小)

    先讲解决方案 1 自动占满容器 设置height min height 0 2 设置overflow hidden 原理是flex内容溢出原理 1 开发中想利用flex 1实现容器自动占满剩余高度 效果如下图 2 实现的时候div3是一个容
  • mysql grouping sets_Hive.GROUPINGSETS的“陷阱”

    之前整理了一下Hive 0 10版引进的GROUPING SETS子句特性 并作了简单的句法使用体验和数据验证 但是当时没有注意到稍微复杂一点的情况 然后 在实际使用过程中 妥妥地就中了一枪 这一枪发生在有JOIN操作的时候 情况是这样的
  • Typora 常用快捷键大全

    Typora 常用快捷键大全 Ctrl 1 一级标题 Ctrl 2 二级标题 Ctrl 3 三级标题 Ctrl 4 四级标题 Ctrl 5 五级标题 Ctrl 6 六级标题 Ctrl 0 段落 Ctrl 提升标题等级 Ctrl 降低标题等级
  • 期货开户的身份识别验证

    无论你是开通商品期货 原油期货还是股指期货以及期权 现在都支持网上办理 原油期货和股指期货以及期权品种都是在商品期货账户的基础上满足条件后再另外开通交易权限 叁格期权小编在这里为各位投资者详细介绍商品期货网上开户流程 一 开户前准备 开户准
  • markdown 表格不能换行吗

    在 Markdown 表格中 不能使用换行符来换行 如果您希望在表格中的单元格内换行 可以使用 HTML 语法 br 例如 列 1 列 2 这是第一列 这是第二列 br 换行了
  • Android 的Activity.getWindowManager().getDefaultDisplay().getWidth()过时了

    Android获取屏幕宽度和高度的方法 1 下面方发已经过时在API 13就已经放弃了 Activity getWindowManager getDefaultDisplay getWidth 获取屏幕宽度 Activity getWind
  • 练习项目npm start启动时报错的个人解决办法

    错误原因 这几天在学习react 跟着慕课网的视频学习 React实战 打造画廊应用 上 React实战 打造画廊应用 下 在用yeoman最初构建项目 完成后需要启动项目 运行npm start时 出现了错误 gt 0 0 1 start
  • Windows环境下基于Python的PyUSB库开发USB通讯

    最近在研究USB通讯 想用Python来实现 比较好用的一个库是PyUSB 但发现相关中文资料比较少 在这里做一个整理 系统是Windows 10 64位 1 安装PyUSB 运行cmd用pip安装pyusb pip install pyu
  • webservice的接口测试工具

    一 webservice介绍 webservice是一个跨语言跨平台的技术 使用webservice进行接口测试时不需要知道每一种语言和操作系统 webservice工作原理 webservice主要核心技术 HTTP 使用http来传输数
  • 解决java或jsp中的For input string的错误

    目录 问题 解决方案 方案一 方案二 方案三 备注 问题 我们在做接jsp开发时 不论是在jsp页面 还是在controller中 都会遇到这样的错误 For input String错误 为什么会出现这样的错误呢 当时 我在init中从数
  • beamer笔记——幻灯片比例改为16:9

    beamer进阶学习 幻灯片比例改为16 9 将幻灯片比例改为16 9 documentclass aspectratio 169 beamer 幻灯片包括的比例主要有 16 10 14 9 1 41 1 5 4 4 3 default 3
  • 【CTF】Python原型链污染

    Python原型链污染 原型链 在Python中每个对象都有一个原型 原型上定义了对象可以访问的属性和方法 当对象访问属性或方法时 会先在自身查找 如果找不到就会去原型链上的上级对象中查找 原型链污染攻击的思路是通过修改对象原型链中的属性
  • Java,微信群

    一起进行Java的知识传递与分享 快来加入吧 有问题可加个人微信 Ysrbj18 备注Java交流 拉你入群 可扫码加我
  • muduo库学习-日志模块的学习以及C++日志模块封装

    前言 开发一款软件 一个好的日志库肯定是必不可少的 c 作为一门这么古老的开发语言 按理说应该有一些好用的日志库 但是在网上找到的那些日志库感觉用起来都不是很得心应手 因此就自己动手写了一个日志库 源码放在github上 我自己写的这个日志