muduo学习笔记 - 第五章 高效的多线程日志
第五章 高效的多线程日志 日志有两种意思: 诊断日志 交易日志 本章讲的是前一种日志,文本的供人阅读的日志,通常用于故障诊断和追踪,也可用于性能分析。 日志通常要记录: 收到的每条消息的id(关键字段,长度,hash等) 收到的每条外部消息的全文 发出每条消息的全文,每条消息都有全局唯一的id 关键部分状态的变更,等等 5.1 功能需求 日志库大体分为前端和后端两个部分 前端负责提供应用程序使用的接口API,并生成日志消息 后端负责把日志消息写到目的地 C++日志库的前端大体有两种API风格 printf的格式化输出风格 stream<<风格 stream风格的好处是当输出日志级高于语句的日志级别时,打印日志操作时个空操作,运行时开销接近零 分布式系统中的服务进程而言,日志的目的地只有一个:本地文件。往网络写日志消息时不靠谱的,因为诊断日志功能之一正是诊断网络故障,如果日志消息也是通过网络发到另一台机器就一损俱损… 本地文件作为destination,日志文件的滚动时必须的,可以简化日志的归档实现 文件大小(例如写满10GB就换下一个文件) 时间(例如每天零点新建一个日志文件,不论上一个文件是否写满) 日志文件压缩和归档,不应该是日志库应有的功能,应该交给专门的脚本去做 日志重复利用空间的功能,只会帮倒忙 往文件写日志的常见问题是,如果程序崩溃,最后几条日志信息就会丢失