高效的多线程日志

功能需求

功能主要包括:

  1. 日志消息的级别: TRACE, DEBUG, INFO, WARN, ERROR, FATAL

  2. 日志消息有多个目的地(appender),如文件,socket, SMTP等

对于分布式系统中的服务进程而言,日志的目的地(destination)只有一个:本地文件。

日志文件的滚动(rolling): 文件大小 & 时间
日志文件的文件名格式
日志文件的压缩与归档(archive)

日志消息的文件格式


1. 每条日志占用一行
2. 时间戳精确到微妙
3. 使用GMT时区
4. 打印线程ID
5. 打印日志级别
6. 打印源文件名和行号

常见问题: 一旦程序崩溃,那么最后若干条日志往往就是丢失了。
muduo解决:

   1.定期将缓存区内的日志消息fflush到硬盘。2.每条内存中的日志消息都带有cookie,其值为某个函数的地址,通过core dump文件中查找cookie就能找到尚未来得及写入磁盘的消息。

性能需求

  1. 不阻塞正常的执行流程

  2. 在多线程程序中,不造成争用

多线程异步日志

muduo日志库采用双缓存技术

第5章 高效的多线程日志相关推荐

  1. muduo学习笔记 - 第五章 高效的多线程日志

    第五章 高效的多线程日志 日志有两种意思: 诊断日志 交易日志 本章讲的是前一种日志,文本的供人阅读的日志,通常用于故障诊断和追踪,也可用于性能分析. 日志通常要记录: 收到的每条消息的id(关键字段 ...

  2. 在多线程应用程序中使用循环缓冲区高效地进行日志记录

    在多线程应用程序中使用循环缓冲区高效地进行日志记录 在关键的计算机应用程序的生存期中,日志记录是一件非常重要的活动,特别是当故障的症状并不十分明显时.日志记录提供了故障前应用程序状态的详细信息,如变量 ...

  3. 一个轻巧高效的多线程c++stream风格异步日志(二)

    一个轻巧高效的多线程c++stream风格异步日志(二) 文章目录 一个轻巧高效的多线程c++stream风格异步日志(二) 前言 LogFile类 AsyncLogging类 AsyncLoggin ...

  4. 一个轻巧高效的多线程c++stream风格异步日志(一)

    一个轻巧高效的多线程c++stream风格异步日志 一个轻巧高效的多线程c++stream风格异步日志 前言 功能需求 性能需求 Logger实现 LogStream类 Logger类 LogStre ...

  5. 第15章 SpringBoot集成logging日志

    第15章 SpringBoot集成logging日志 15.1 SLF4J与Logback简介 15.2 spring-boot-starter-logging 15.3 logback-spring ...

  6. CoreJava 笔记总结-第七章 异常,断言和日志

    文章目录 第七章 异常,断言和日志 处理错误 异常的分类 声明检查型异常 如何抛出异常 创建异常类 捕获异常 捕获单个异常 捕获多个异常 再次抛出异常和异常链 `finally`子句 `try-wit ...

  7. java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程

    [第一章]Java多线程编程 一.进程与线程 多个时间段会有多个程序依次执行,但是同一时间点只有一个进程执行 线程是在进程基础之上划分的更小的程序单元 ,线程是在进程基础上创建并且使用的,所以线程依赖 ...

  8. 《Kotlin 程序设计》第十二章 Kotlin的多线程:协程(Coroutines)

    第十二章 Kotlin的多线程:协程(Coroutines) Kotlin 1.1 introduced coroutines, a new way of writing asynchronous, ...

  9. 【MySQL 第17章_其他数据库日志】

    第17章_其他数据库日志 1.MySQL支持的日志 1.1日志类型 1.2日志的弊端 2.慢查询日志(slow query log) 3.1问题场景 3.2 查看当前状态 3.3 启动日志 3.4 查 ...

最新文章

  1. 合肥工业大学—SQL Server数据库实验十:用户及其权限管理
  2. 自建通用Makefile 分享
  3. 安装ESXi5.5遇到Relocating modules and starting up the kernel的处理
  4. golang beego快速入门示例(单文件hello.go)
  5. (转)java类初始化顺序 - jackyrong的世界 - 博客园
  6. RxSwift之UI控件UISlider与UIStepper扩展的使用
  7. 传统公司部署OpenStack(t版)简易介绍(七)——cinder模块部署
  8. 腾讯offer-众里寻他千百度
  9. 将编号为0和1的两个栈存放于一个数组空间V[m]中。
  10. 【渝粤题库】陕西师范大学210015幼儿园社会教育作业(高起专)
  11. thinkphp mysql exp_thinkphp备份数据库的方法分享
  12. python filter函数_第九篇:Python中lambda、filter和map函数
  13. 推荐微软Windows 8 Metro应用开发虚拟实验室
  14. icesat/glas与SRTM参考椭球、基准对比
  15. 【转】MongoDB:C#应用
  16. 超标量处理器的分支预测
  17. 运行Wlmadmin无法访问计算机,网络许可证管理员指引.PDF
  18. CAJ格式文件怎么转换为PDF格式
  19. 交叉线和直通线的区别和用途
  20. 【Python】《三国演义》人物出场统计

热门文章

  1. [转]Visual Studio 2010 MSDN 文件位置及安装注意事项
  2. 高三!忏悔ing~(在这儿的第一篇随笔)
  3. 解决企业人力短缺难题?且看RPA如何大展身手!
  4. 短视频抢了直播饭碗,花椒、映客们逆袭抖音、快手无门
  5. 前端入门-day2(常见css问题及解答)
  6. IAR常用快捷键及技巧
  7. Qt5.4中遇到找不到头文件QApplication等。
  8. HDOJ 2050 折线分割平面
  9. 一个资深系统管理员的O2O实践(引子)
  10. Exchange企业实战技巧(18)日志规则应用之审计邮箱