日志要帮助人还原故障,而不是在故障时再制造一次超时。它应带有等级、模块、时间和必要上下文,同时避免在中断或实时路径里格式化长字符串、等待串口 DMA 或阻塞网络。常用做法是前台快速写入有界缓冲区,后台任务再批量输出。
在实时路径上只记录事实
例如记录“状态机从 A 转到 B”“传输超时”“队列长度达到阈值”,比在中断里 printf 一段长文本更可靠。结构化事件可以保存事件 ID、时间戳、任务号和少量参数,主机端再根据字典还原为可读文本。这样缓冲区占用可估算,日志格式也能随固件版本管理。
如果必须保存字符串,应限制最大长度,并避免把未初始化内存、敏感内容或大块二进制数据直接写进日志。高频路径可以采用采样或聚合,例如每秒汇总一次丢包数,而不是每丢一包就输出一行。
缓冲区满时的策略要提前决定
日志后台变慢很常见:串口没有连接、Flash 正在擦除、网络断开或主机没有读取。此时前台不能无限等待。调试日志通常可以丢弃,错误和复位原因需要优先保留;无论策略是什么,都应暴露丢失计数和当前占用,避免看到“系统一切正常”却不知道关键日志早已被覆盖。
参考:EasyLogger