日志系统记录的内容及作用?
在开发其他模块时写入一些关键信息,后续可以通过日志判断模块功能是否正常,对不明情况进行分析。在运行期间主要记录新客户的建立与断开、异常事件的发生(并发数量达到上限、套接字初始化失败)。
说下你的日志系统的运行机制?

1、单例获取实例
2、init初始化实例,新建日志,日志会进行分级/分文件判断,判断是同步还是异步,同步直接写入日志,异步先写入阻塞队列,写线程取出写入日志。
3、其他模块调用write_log函数写日志。
为什么要异步?和同步的区别是什么?
同步日志写入函数与工作线程串行执行,由于涉及I/O操作,单条日志过大的时候,同步模式会阻塞处理流程,使得服务器并发能力下降。
异步日志采用生产者、消费者模型,工作线程先将所写日志存入缓冲区,写线程从缓冲区取出内容,写入日志,并发能力更高一些。
日志系统的实现需要考虑什么?
线程安全性、效率问题
1、线程安全性
日志系统需记录多个连接运行情况,也就是说日志系统被多个线程拥有,考虑到线程安全问题,需要对操作加锁,避免出错。
2、效率问题
实现了人为加锁,而日志需IO操作,线程间会产生竞争、阻塞。使用异步处理提高效率,后续可以考虑优化为双缓冲区。
日志系统的缓冲区满了(内存不足)怎么办?
1、缓冲区动态扩容【复写已经写入内核缓冲区、STL底层扩容机制】
2、主动丢弃数据