一,日志系统的目的
1.⽣产环境的产品为了保证其稳定性及安全性是不允许开发⼈员附加调试器去排查问题, 可以借助⽇志系统来打印⼀些⽇志帮助开发⼈员解决问题
2.上线客⼾端的产品出现bug⽆法复现并解决, 可以借助⽇志系统打印⽇志并上传到服务端帮助开发⼈员进⾏分析
3. 对于⼀些⾼频操作(如定时器、⼼跳包)在少量调试次数下可能⽆法触发我们想要的⾏为,通过断点的暂停⽅式,我们不得不重复操作⼏⼗次、上百次甚⾄更多,导致排查问题效率是⾮常低下,可以借助打印⽇志的⽅式查问题
4. 在分布式、多线程/多进程代码中, 出现bug⽐较难以定位, 可以借助⽇志系统打印log帮助定位
bug
5.帮助⾸次接触项⽬代码的新开发⼈员理解代码的运⾏流程
二,实现功能
1.支持多级别日志消息
根据日志消息的威胁程度进行分级输出,例如警告日志,错误日志等
2.支持同步日志和异步日志
同步指的是由主线程来输出,异步是由其他工作线程来输出
3. 支持可靠写入日志到控制台,文件以及滚动文件
指的是将日志消息进行标准输出,或者写到一个文件里,或者按日期分文件写入
4.支持多线程程序并发写日志
我们会确保日志系统是线程安全的,因此也支持多线程程序并发写日志
5.支持拓展不同的日志落地目标地
可以应用各种场景
三,开发环境
1.CentOS 7
2.vscode/vim
3.g++/gdb
4.Makefile
四,核心技术
1.类层次设计(继承和多态的应用)
2.C++11(多线程,智能指针,auto,右值引用等)
3.双缓冲区
4.生产消费模型
5.多线程
6.设计模式(单例,工厂,代理等)
总结
本文主要简单介绍一下日志系统,后续也会记录项目实现,感兴趣的老铁可以关注一下