Skip to content

Latest commit

 

History

History
40 lines (22 loc) · 1.09 KB

Logger.md

File metadata and controls

40 lines (22 loc) · 1.09 KB

Multi-thread log

多线程日志库

Requirements

  • C++11
  • Linux or MAC OS

High Performance

O2优化,

单线程写100万条日志600ms左右,多线程速度可提高到每100万日志300-400ms左右

即每秒300w+

但线程过多(超过CPU个数)可能会退化到单线程的水平.

High Reliability

在进程关闭时候,IO线程退出前,同步等待生产者线程完成.

并且此时将不能再创建新的logger对象,确保迅速收敛.

生产者线程在日志关闭后写日志将得到提示并输出到屏幕.

这一现象并不应该发生,只有在全局对象的析构函数调用日志可能会触发.

由于C++不保证不同编译单元全局对象的构造和析构顺序,在析构函数中做过多的

工作似乎也不是合理的。

Rationale

每个生产者线程在格式化日志数据的时候是不需要锁的,因为访问的是thread-local数据.

每个生产者线程有独立的输出buffer,通过thread id来索引.

当输出buffer超过阈值,主动唤醒IO线程

唯一的IO线程,将buffer输出到mmap的日志文件中.