前言

fwrite到用户缓冲区再write再到内核,相比write直接写入内核肯定是多了一个缓冲区。需要特别注意的是,每次写入数据短<1024时候,fwrite效率更高。每次写的数据多,比如2900,write的效率更高,因为fwrite需要二次拷贝。

一、日志写入逻辑

log4cpp既拥有c语言风格printf()的日志输出格式,也有c++语言cout<<这种输出格式。

  • 可以分模块打印不同的日志文件。
  • 也可以把所有模块的日志也打印同一个文件。
    一秒钟打印10000条日志,那肯定是不行的,会影响服务器性能。好的日志,一秒钟能达到百万级别。
    同步日志方式,只适合用在客户端。
    异步日志方式,适合在服务器。
    检查文件大小,导致日志库性能大幅度下降。

    二、Log4cpp日志框架

    实时写入磁盘 单笔write
    多行日记累计再写入,累计了就差一行却一直得不到消息。
    单独启动一个定时器,1秒去刷新一次。

三、log4cpp范例讲解

四、muduo日志库分析

1、性能分析

双缓冲机制

  • 日志notify问题,写满一个buffer才一次notify
  • 通过wait_timeout去读取日志,然后写入磁盘

2、日志批量写入

3、批量唤醒写线程

4.写日志用notify+wait_timeout方式触发日志的写入

5、锁的粒度,双缓冲,双队列

双缓冲机制:
1、日志notify问题
(1)写满一个buffer才一次notify插入日志,日志apt调用线程
(2)通过notifywait_timeout去读取日志,然后写入磁盘 日志落盘线程

2、能够避免buffer不断分配
3、buffer默认4M一个
那就写满4M才notify一次

6、buffer默认4M缓冲区,buffer队列,push、pop时使用mov语义减少内存拷贝

通过源码不难看出,当落盘线程跟不上生产日志线程会new一个新的缓冲队列。
把buffer里面的buffer转移道buffersToWrite 把里面的数据全部落盘。

总结

今天通过Darren老师的讲述,让我对日志库有了初步的了解。因为自己工作中正好需要日志库,所以利用业余时间调研了glog,booslog,log4cpp等等,听了darren老师的课如获至宝。以前认为日志库一秒钟写几千条就已经很了不起了,而Darren老师表示日志一秒钟记个几百万条才是正常的日志库,让我瞬间认清了自己与大佬之前的差距。希望未来能虚心学习,不断磨练意志,早日若离苦海。

推荐一个 c/c++Linux后台服务器开发的经典教程给大家,个人觉得讲的不错,有兴趣的可以学习下。

Linux服务器开发,开源框架log4cpp和日志模块实现相关推荐

  1. C/C++Linux服务器开发高级架构师/Linux后台开发架构师丨高级进阶学习

    01 课程介绍 [录播]课程介绍(66分钟) 免费试学 [录播]磁盘存储链式的B树与B+树(131分钟) 免费试学 免费学习视频链接点击:C/C++Linux服务器开发高级架构师/Linux后台架构师 ...

  2. 【零声教育】C/C++Linux服务器开发/高级架构师 课程

    随着去年年底的疫情,很多线下的学习都变成了网课的形式,各种付费学习也萌生出来,很多决定要报名付费网课例如零声学院C/C++linux后台服务器高级架构师的程序员,报名之前总会问我这样一个问题,除了视频 ...

  3. 关于2022年12代C/C++Linux服务器开发高级架构师课程体系分析

    对于零声教育的C/C++Linux服务器高级架构师的课程到2022目前已经迭代到12代了,像之前小编也总结过,但是课程每期都有做一定的更新,也是为了更好的完善课程跟上目前互联网大厂的岗位技术需求,之前 ...

  4. C/C++Linux服务器开发完整学习路线(含免费学习资料下载地址)

    C/C++Linux服务器开发完整学习路线(含免费学习资料下载地址) 相信大部分同学刚毕业或者想转行做c++服务端开发的时候都很迷茫不知道从哪里开始学习,于是准备参加各种培训班或者网络培训,有不知道该 ...

  5. Linux服务器开发初步

      服务器开发需要考虑的内容很多,比如服务器的架构.稳定性.性能以及负载能力等等. 事实上,在开发服务器的过程中,需要综合考虑各种因素,比如就客户端连接时间较短却又比较频繁的服务器(例如HTTP服务器 ...

  6. Linux服务器开发环境搭建 Nginx+PHP+MongoDB

     Linux服务器开发环境搭建 Nginx+PHP+MongoDB mkdir -p /home/trlinux/download mkdir -p /home/trlinux/server mkdi ...

  7. cs架构用什么语言开发_C、C++、Go 语言、Linux服务器开发高级架构师进阶之路

    C++这门语言从诞生到今天已经经历了将近30个年头.不可否认,它的学习难度都比其它语言较高.而它的学习难度,主要来自于它的复杂性. 现在C++的使用范围比以前已经少了很多,Java.C#.Python ...

  8. 【职业篇】Linux服务器开发架构师, 高屋建瓴谈谈知识体系的建立丨职业方向就业分析解决你的就业疑虑

    Linux服务器开发架构师, 高屋建瓴谈谈知识体系的建立丨职业方向就业分析解决你的就业疑虑 应届生就业方向选择,行业选择决定了 职业的高度分析,1-3年,3-7年,7-10年,纯度比较高技术(方向)栈 ...

  9. Linux服务器开发【有用知识】—MySQL事务原理分析

    前言 今天的目标是学习MySQL事务原理分析,但是却似乎总是非常不顺利,概念和实操实在多到令人发指,故干脆轻松学完一节课,等到时机到了再重新刷一遍吧! 一.事务是什么? 将数据库从一致性状态转化成另一 ...

最新文章

  1. JAVA面试题系列:如何解决Redis的并发竞争问题
  2. 关于Android中的乱码
  3. 【OpenCV】5种图像滤波辨析:方框、均值、高斯、中值、双边
  4. 简洁的描述SpringMVC工作流程
  5. 【Linux】一步一步学Linux——pidof命令(122)
  6. 写出完美CSS代码的5个重要方面
  7. oracle cannot allocate new log,Thread 1 cannot allocate new log
  8. vue-cli配置jquery 以及jquery第三方插件
  9. C/C++网络编程工作笔记0001---网络编程的基本概念
  10. 如何让Log4net日志文件按每月归成一个文件夹,StaticLogFileName参数的用法
  11. HDU2047 阿牛的EOF牛肉串【递推】
  12. matlab曲线拟合后怎么看公式,matlab拟合曲线并输出公式
  13. ba无标度网络python_python绘制BA无标度网络
  14. oppo(不root)手机查看万能钥匙破解的wifi密码实例
  15. python连接服务器执行命令进行部署
  16. Excel下拉选项设置
  17. matlab反双曲函数表达,matlab求反正切
  18. discuz自定义接口开发——一键发帖,自动发帖,站外发帖(主题)
  19. SVN版本库备份和恢复
  20. AntV使用方法详解

热门文章

  1. 距离最短原则的离散点连接 Python实现
  2. 右键没有WinRAR压缩的解决方法
  3. 传输线方程与终端加载的无损耗传输线
  4. 两个鸡蛋,100层楼,找出摔碎鸡蛋的最低楼层,所用的摔鸡蛋次数最少
  5. 论文阅读:Overview of the NLPCC 2018 Shared Task: Grammatical Error Correction
  6. 用优盘装系统看不到计算机本身的硬盘,给电脑装系统!的时候找不到硬盘只能看到u盘数据我怀疑硬盘坏了主机? 爱问知识人...
  7. 腾讯云国外服务器2核4G服务器新用户全攻略
  8. 手绘风格的白板Excalidraw
  9. 赶紧学会!开发者愚人节怎么写代码。。。
  10. 【华为OD机试真题 JS】出错的或电路