1. 简介

Logging用于将日志事件信息(时间 日志级别 文件名 行号等)加到输出缓冲区,默认输出到stdout。

2. 类与接口

① 私有内部类Impl
将日志事件(时间 日志级别 文件名 行号等)信息加到输出缓冲区具体实现

② 公共内部类SourceFile
计算源文件basename

③ 一些重要成员函数
4种构造函数,根据参数将额外信息加到输出缓冲区
析构函数把LogStream缓冲区中的内容取出来,由g_output控制输出到特定文件,默认为stdout

typedef void (OutputFunc)(const char msg, int len);
输出的控制函数,默认输出到stdout

typedef void (*FlushFunc)();
刷新的回调函数,默认刷新标准输出

④ 日志宏定义
如果level<=当前级别,用一个匿名Logger对象,调用stream(),返回一个LogStream类型的引用,这个类重载了<<运算符,然后把信息输入到缓冲区

⑤ 普通全局变量
g_output 日志输出

g_flush 日志刷新

g_logTimeZone 时区信息

⑥ 线程局部变量
t_errnobuf 存储errno描述信息

t_time 存储格式化后的时间信息

t_lastSecond 记录上一次记录的时间,在Impl的formatTime()中使用,如果时间不同才更新

3. 一般流程

前端线程使用LOG_XX宏定义记录日志信息,宏会调用Logger构造函数生成匿名Logger对象并返回该对象的impl_.stream_,stream_为LogStream的引用,此时LOG_XX << ...会调用LogStream重载的<<将日志信息存入LogStream内部Buffer,Logger对象析构时会取出内部impl_.stream_的Buffer,并由g_output控制输出到特定文件,默认为stdout。

4. 参考

https://www.icode9.com/content-4-399239.html
Github

muduo Logging详解相关推荐

  1. python logging详解及自动添加上下文信息

    之前写过一篇文章日志的艺术(The art of logging),提到了输出日志的时候记录上下文信息的重要性,我认为上下文信息包括: when:log事件发生的时间 where:log事件发生在哪个 ...

  2. muduo scoped_ptr详解

    1. 简介 scoped_ptr类似于智能指针只能在作用域里使用,不希望被转让. 2. 类与接口 #ifndef _SCOPE_PTR_HH #define _SCOPE_PTR_HH // scop ...

  3. muduo BlockingQueue详解

    1. 简介 利用条件变量和std::deque实现阻塞队列 2. 类与接口 插入数据,有2个版本 void put(const T& x) 非常量可以初始化一个底层const,反过来却不行 可 ...

  4. muduo StringPiece详解

    1. 简介 该StringPiece是PCRE的实现,是对字符串的一个proxy类而已(即设计模式中的代理模式). 2. 背景 很多时候,当传入一个字符串到函数时,往往只是读取字符串时 若使用std: ...

  5. muduo Date详解

    1. 简介 用于Julian Day和普通年月日的转换 2. 类与接口 2.1 class Date : public copyable ① Date::Date(int y, int m, int ...

  6. muduo Timestamp详解

    1. 简介 Timestamp用于提供时间戳相关的工具函数. 2. 类与接口 ① string toString() const 返回时间的字符串形式,例如1649224501.687051 ② st ...

  7. muduo Thread详解

    1. 简介 Thread用于线程管理. 2. pthread_atfork 在进行linux系统里开发时,经常会调用linux的系统函数fork来产生一个子进程,如果父子进程都没有用到pthread线 ...

  8. muduo Mutex详解

    1. 简介 多线程环境下利用pthread进行共享资源的互斥操作,该模块使用了Thread safety annotations技术,若使用了cling c++解析器,可以在编译时进行线程安全分析,如 ...

  9. Python日志详解【两篇就够了系列】--第一篇logging

    目录 第一章 Python日志模块logging详解 一.logging的框架 1.Logger 2.Handler 3.Formater类 4.Filter类 二.Log级别 三.Log格式 四.常 ...

最新文章

  1. python中pygame模块的Linux下安装过程
  2. JMeter测试TCP/IP Socket应用的性能
  3. 是否有一个不区分大小写的string.Replace的替代方法?
  4. leetcode_longest substring without repeating characters
  5. wxWidgets:在全局范围内捕捉关键事件
  6. 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
  7. 一个秒杀系统,居然比八股文还好使!
  8. android mediarecorder 输出到流_音视频的采集、编码、封包成 mp4 输出
  9. 计算机论文格式要求吗,论文格式
  10. jackson dataformat yaml简介及使用
  11. pythonpdf识别文字_python 提取pdf文字
  12. 直播提醒|今晚八点半,最硬核情感分析技术讲解来袭!内附SKEP详解+大作业指导!...
  13. 《软技能-代码之外的生存指南》————第二篇 自我营销
  14. Log4j2漏洞发展历程及解决方案
  15. Vue.js使用Echarts动态渲染多个图表
  16. 模拟linux终端测试java,Linux 伪终端(pty)
  17. redis 端口号为什么是 6379
  18. html表格怎么去除重复,在HTML中重复表格标题
  19. pc串口卡和plc怎么接线_计算机COM1串行口就是RS232串行口么 串行线两端的串行口与计算机和PLC怎么样的线序连接...
  20. 【软件测试基础理论知识】1.3软件开发模型之—敏捷开发(敏捷模型)

热门文章

  1. 什么是混淆矩阵精度、召回率、准确性、F1 分数、FPR、FNR、TPR、TNR?
  2. AppCode Updating indexes一直不停的填坑之旅
  3. 前端知识小报第二十期
  4. Java基本小练习4(画星星)
  5. flutter 音乐 录音 播放 audioplayers
  6. 再也不怕,缓存雪崩、缓存击穿、缓存穿透
  7. VirtualBox虚拟机与主机之间复制粘贴设置以及文件拖拽
  8. Elasticsearch 跨网络、跨集群同步选型指南
  9. 28335之定时器原理
  10. 千与千寻 学生网页设计与制作