01
日志系统概述
为什么需要日志?日志级别定义(DEBUG、INFO、WARN、ERROR、FATAL),设计原则
基础设计
02
基础日志实现
printf实现简单日志,封装日志打印函数,添加时间戳
printf时间戳
03
日志级别控制
宏定义控制输出级别,运行时动态调整日志级别
宏动态
04
文件日志输出
日志写入文件,文件打开关闭管理,滚动策略
文件I/O滚动
05
日志格式定制
自定义格式(时间、级别、文件名、行号、函数名),ANSI颜色
格式化颜色
06
可变参数日志
stdarg.h实现类似printf的可变参数日志接口
stdarg接口
07
断言与调试
assert宏,自定义断言,调试/发布模式切换
断言模式
08
条件编译调试
#ifdef/#ifndef控制调试代码,DEBUG宏最佳实践
预处理DEBUG
09
调试信息分类
功能模块分类(MOD_A、MOD_B),模块级日志开关
模块开关
10
性能日志
记录函数执行时间,clock()/gettimeofday(),性能分析基础
时间性能
11
环形缓冲区日志
无锁环形缓冲区设计,高效写入,避免动态内存分配
无锁高效
12
远程日志
通过网络发送日志(UDP/TCP),简单日志服务器实现
网络UDP/TCP
13
日志系统架构
分层设计(接口层、核心层、输出层),模块解耦
架构解耦
14
多线程日志安全
互斥锁保护,线程局部存储(TLS),无锁日志队列
线程TLS
15
日志过滤与检索
按级别过滤,按模块过滤,关键字检索
过滤检索
16
日志统计与告警
错误率统计,日志频率监控,自动告警机制
统计告警
17
日志压缩与归档
gzip压缩日志,按日期归档,自动清理旧日志
压缩归档
18
日志系统配置
配置文件解析(INI/JSON),运行时重载配置
配置重载
19
日志系统测试
单元测试框架(CUnit/Unity),压力测试
测试压力
20
日志系统性能优化
减少I/O次数,批量写入,异步日志
优化异步
21
日志系统移植
跨平台兼容(Linux/Windows/RTOS),抽象层设计
移植跨平台
22
日志系统安全
防止日志注入,敏感信息过滤,访问控制
安全过滤
23
日志系统扩展
插件化输出(控制台、文件、数据库、ELK),动态加载后端
插件ELK
24
调试技巧
GDB基本使用,条件断点,watchpoint,backtrace
GDB断点
25
内存调试
Valgrind使用,内存泄漏检测,越界访问检测
Valgrind泄漏
26
静态分析
PC-Lint/Cppcheck,常见静态分析规则,CI集成
静态分析CI
27
动态分析
覆盖率测试(gcov/lcov),性能剖析(gprof),调用图
覆盖率gprof
28
实战案例1:嵌入式设备
资源受限环境,Flash存储,低功耗日志设计
嵌入式低功耗
29
实战案例2:高并发服务器
每秒百万级日志,异步写入,分布式追踪
高并发分布式
30
实战案例3:桌面应用
用户界面集成,实时显示,日志导出
桌面UI