muduo 异步日志实现

目录

一、日志级别与格式

二、日志的目的地

三、多线程异步日志实现

(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 异步日志实现_第2张图片

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

muduo 异步日志实现_第3张图片

 

 

你可能感兴趣的:(网络库,logging)