目录

一、日志级别与格式

二、日志的目的地

三、多线程异步日志实现

(1)特点

(2)具体实现


muduo是陈硕个人使用C++开发的一款网络库,代码写的很有学习价值,总结的内容来自书籍《Linux 多线程服务器端编程》,也是由陈硕编写,可以配合github代码一起使用。

muduo github网址:https://github.com/chenshuo/muduo

一、日志级别与格式

TRACE、DEBUG、INFO、WARN、ERROR、FATAL,默认级别从环境变量中获取,调整级别只需要调用Logger::setLogLevel()即可;

muduo日志消息的格式如下:

其中时间戳字符串中的日期和时间两部分是缓存的,一秒之内的多条日志只需重新格式化微秒部分。

二、日志的目的地

写到本地文件。

滚动条件:文件大小和时间,针对程序崩溃,日志没法flush到硬盘,muduo会定期(每隔3秒)将缓冲区的日志flush到硬盘,而且每条内存中的日志消息都带有cookie(某个函数的地址),这样可以在core dump文件中查找cookie就能找到还没来得及写入磁盘的消息。

三、多线程异步日志实现

(1)特点

每个进程只写一个日志文件,用一个背景线程负责收集日志信息,并写入日志文件,其他业务线程只管往这个背景线程发送日志消息。

(2)具体实现

双缓冲技术:准备两块buffer,A、B,前端负责往buffer A中填数据,后端负责将buffer B的数据写入文件,当buffer A写满后,交换A和B,让后端将bufferA的数据写入文件,前端继续往bufferB填入新的消息,如此往复。

为了及时将日志写入文件,即使buffer A没满,也会每隔3秒进行交换写入操作。

前端写入频率不高时:

前端写入频率较高时:

前端写入频率过高,消息密集时:

muduo 异步日志实现相关推荐

  1. muduo多线程异步日志分析

    最近在看muduo的源码,对于其日志系统的实现颇为感兴趣,找了两三天好好研究了一下,本文记录一些所学到的知识. 基础知识 日志是每个高性能服务器必备的组件,分为两种:诊断日志和交易日志.诊断日志,主要 ...

  2. 双缓冲异步日志(Async Logging)

    文章目录 一.日志系统简介 二.功能需求 三.性能需求 四.高效的异步日志 1.异步日志的概念 2.双缓冲异步日志解析 3.AsyncLogging源码 4.代码运行图示 五.双缓冲异步日志的相关问题 ...

  3. 一个轻巧高效的多线程c++stream风格异步日志(二)

    一个轻巧高效的多线程c++stream风格异步日志(二) 文章目录 一个轻巧高效的多线程c++stream风格异步日志(二) 前言 LogFile类 AsyncLogging类 AsyncLoggin ...

  4. 一个轻巧高效的多线程c++stream风格异步日志(一)

    一个轻巧高效的多线程c++stream风格异步日志 一个轻巧高效的多线程c++stream风格异步日志 前言 功能需求 性能需求 Logger实现 LogStream类 Logger类 LogStre ...

  5. C++ LinuxWebServer项目(5)同步异步日志系统

    一.前言 对于任何一个服务器而言,日志系统的设计是非常重要的,尝试设计一个简易的同步异步日志系统来完成系统日志的记录. 二.基础知识 日志,由服务器自动创建,并记录运行状态,错误信息,访问数据的文件. ...

  6. cli能记日志web不能php,异步日志输出方案

    - 深入了解PHP生命周期 一.背景 日志在WEB应用中的使用非常广泛,记录访问者IP,访问者操作的数据,接口请求的信息,异常提示信息等,尤其在产品环境中,我们往往需要通过日志来分析当前应用的运营情况 ...

  7. java 多线程 异步日志_精彩技巧(1)-- 异步打印日志的一点事

    一.前言 最近刚刚结束转岗以来的第一次双11压测,收获颇多,难言言表, 本文就先谈谈异步日志吧,在高并发高流量响应延迟要求比较小的系统中同步打日志已经满足不了需求了,同步打日志会阻塞调用打日志的线程, ...

  8. Log4j2异步日志背后的数字

    作者:京东集团-京东零售-技术与数据中台-共享技术部-流量技术组 王丽. 引言 在程序开发过程中,几乎任何一个应用程序都会通过打印日志来记录跟踪程序运行情况,打印日志信息不仅可以让我们详细的了解程序内 ...

  9. boost::log模块实现多线程异步日志记录示例

    boost::log模块实现多线程异步日志记录示例 实现功能 C++实现代码 实现功能 boost::log模块实现多线程异步日志记录示例 C++实现代码 #include <stdexcept ...

  10. log4j异步mysql_log4j2用Log4jContextSelector启动参数配置全局异步日志是如何使用disruptor...

    与 log4j2用asyncRoot配置异步日志是如何使用disruptor差异有几个: 给disruptor实例的EventFactory不同 此处EventFactory采用的是RingBuffe ...

最新文章

  1. 鹅厂2020暑期实习第二次一面
  2. 初步了解win32界面库DuiLib
  3. DFT实训教程笔记4(bibili版本)- ATPG
  4. 全球及中国太阳能硅片产业供需走势及投资建设前景分析报告2021-2027年
  5. 使用Docker-数据卷挂载案例1
  6. thinkPHP 空模块和空操作、前置操作和后置操作 具体介绍(十四)
  7. 【贪心】逃跑(jzoj 1748)
  8. mysql frm 恢复_mysql 从 frm 文件恢复 table 表结构的3种方法
  9. thttpd支持php吗,轻量型thttpd+php5
  10. 使用postman解决浏览器POST测试时登录问题:未登录无法进行POST提交
  11. 小程序中如何使用vantUi库
  12. 9008刷机工具_一加6(oneplus6)手机氧OS底包下刷入MIUI12详细刷机教程
  13. pdf文件如何转换成dwg文件
  14. c语言程序设计景点售票系统,c语言售票系统.docx
  15. 游戏核心玩法中,设计个体模块差异与平衡的思路
  16. Luckily general gradient for spherical harmonics is defined
  17. 在线教育报告上线,助力职业与成人教育行业高效运营
  18. 视频的帧率和分辨率以及码率的关系
  19. 玩转华为ENSP模拟器系列 | 配置普通NTP对等体模式示例
  20. mysql数据库数据类型_MySQL-数据类型

热门文章

  1. excel在线_如何设计有趣又实用的在线课程
  2. android 测试手机屏幕,如何才能知道自己手机屏幕质量如何 安卓手机专业测屏神器体验...
  3. 用flashAS3.0做一个连线题
  4. 【Vue】转-Vue.js经典开源项目汇总
  5. 如何编写用户故事的验收标准
  6. emu8086:汇编语言复制数组案例
  7. JS 正则表达式 手机号码正则
  8. 前端模糊搜索,拼音模糊搜索,js拼音模糊搜索
  9. 号码吉凶查询易语言代码
  10. 神经网络训练ai玩游戏,人工神经网络入门