第3章:日志解析入门——时间戳、等级与模块标签

好,咱们正式开始动手解析日志了。

说实话,很多新手拿到一份WiFi或蓝牙日志,第一反应就是头大。满屏的字符,不知道从哪看起。我当年也是这样,盯着屏幕看了十分钟,愣是没找到一条有用的信息。

其实没那么复杂。日志解析,说白了就是三件事:看时间、看等级、看是谁发的。搞懂这三样,你就能从日志里读出80%的信息。

3.1 时间戳:日志的“身份证”

每一条日志,都会带一个时间戳。它告诉你这件事发生在什么时候。

但这里有个坑——不同系统、不同芯片厂商,时间戳的格式五花八门。我见过最离谱的是用芯片上电后的毫秒数,连绝对时间都没有。

3.1.1 常见时间戳格式

格式类型 示例 说明
绝对时间(年月日时分秒) 2025-03-15 14:23:45.678 最直观,一看就懂
相对时间(系统启动后) [ 12345.678901] Linux内核日志常用,单位是秒
芯片内部Tick @1234567890 高通、博通芯片常见,需要换算
无时间戳 (空白) 多见于串口打印,最头疼

我个人习惯,拿到日志第一件事就是确认时间戳格式。如果是相对时间,我会先找到系统启动的时间点,然后换算成绝对时间。这样排查问题时,才能和业务日志对上号。

小技巧: 如果你看到 [ 12345.678901] 这种格式,心里默念:这是系统启动后第12345秒发生的事情。换算成小时就是除以3600,约3.4小时。

3.1.2 时间戳的精度问题

嗯,这里要注意。不同日志的时间戳精度不一样。

  • 毫秒级:大部分WiFi芯片日志都能做到
  • 微秒级:蓝牙低功耗(BLE)的精确时间戳,调试连接间隔时非常有用
  • 秒级:一些老旧驱动或应用层日志,精度不够,只能看个大概

我在项目中遇到过一个问题:WiFi日志显示断连发生在14:23:45,但应用层日志显示业务中断在14:23:47。差了2秒。后来发现是WiFi芯片用的是微秒级时间戳,而应用层日志是秒级,四舍五入导致的。所以,跨模块对比时间时,一定要先对齐精度

3.2 日志等级:分清轻重缓急

日志等级,就是告诉你这条消息有多严重。大部分系统都遵循一套通用的等级划分。

3.2.1 四个核心等级

等级 关键字 含义 我的处理方式
Error ERR, ERROR, FATAL 发生了错误,功能可能受影响 必须看,优先解决
Warning WARN, WARNING 出现了异常情况,但系统还能运行 需要关注,可能是隐患
Info INFO, NOTICE 正常信息,记录系统状态 用于了解流程,排查时参考
Debug DEBUG, DBG, VERBOSE 调试信息,非常详细 平时关掉,出问题时再打开

你想想看,如果一份日志里全是Info和Debug,那Error和Warning就会被淹没。我建议排查问题时,先过滤出Error和Warning,把大方向定下来,再去看Info细节。

避坑指南: 我曾经遇到一个案例,日志里全是Warning,没有Error。同事觉得没问题,就放过去了。结果上线后,设备频繁断连。后来一查,那些Warning其实是“重传次数超过阈值”的提示,积累到一定程度就会触发断连。所以,Warning不是摆设,它往往是Error的前兆

3.2.2 如何快速定位Error

说白了,就是靠关键词搜索。我常用的命令是:

grep -i "error\|err\|fail\|fatal" log.txt

这条命令会忽略大小写,把包含error、err、fail、fatal的行都找出来。对于蓝牙日志,我还会加上:

grep -i "disconnect\|timeout\|abort" log.txt

3.3 模块标签:知道是谁在说话

日志里除了时间和等级,还有一个关键信息——模块标签。它告诉你这条日志是哪个模块打印的。

3.3.1 常见模块标签示例

以我调试过的某款WiFi芯片为例,日志里经常出现这些标签:

  • [WLAN][WIFI]:WiFi核心驱动
  • [BT][BLE]:蓝牙/低功耗蓝牙
  • [COEX]:WiFi和蓝牙共存模块
  • [HCI]:主机控制器接口,蓝牙协议栈底层
  • [L2CAP]:蓝牙逻辑链路控制与适配协议
  • [SCAN]:WiFi扫描模块
  • [SUPPLICANT]:WPA/WPA2认证模块

举个例子,你看到这样一条日志:

[ 1234.567890] [WLAN] [ERROR] Scan timeout, no AP found

解读一下:

  • [ 1234.567890]:系统启动后第1234秒
  • [WLAN]:WiFi驱动模块
  • [ERROR]:错误等级
  • Scan timeout, no AP found:扫描超时,没找到任何热点

你看,一条日志,三要素齐全,问题定位就快多了。

3.3.2 如何识别不规范的标签

不是所有日志都这么规整。有些厂商的日志,模块标签可能藏在行首、行尾,甚至没有标签。我教你一个笨办法:

  1. 先看日志的前几行,找规律
  2. 如果发现某些关键词反复出现(比如 wlan0hci0),那它可能就是隐式的模块标签
  3. 实在不行,就按功能分类——跟连接有关的归到连接模块,跟数据有关的归到数据模块
我的经验: 调试蓝牙时,重点关注 [HCI][L2CAP] 这两个标签。HCI层出问题,往往是硬件或驱动层面的;L2CAP层出问题,多半是协议栈或应用层的锅。这个区分,能帮你省下不少时间。

3.4 实战:解析一条真实日志

来,咱们看一条真实的WiFi连接失败日志:

[ 5678.901234] [WLAN] [INFO] Starting connection to SSID: "HomeWiFi"
[ 5678.901567] [WLAN] [DEBUG] Auth algorithm: Open System
[ 5679.102345] [WLAN] [WARN] Authentication response timeout
[ 5679.102346] [WLAN] [ERROR] Connection failed: Auth timeout

一步步拆解:

  1. 时间戳:从5678秒开始,到5679秒结束,整个过程约1秒
  2. 等级:先是Info,然后是Debug,接着Warning,最后Error。典型的“逐渐恶化”模式
  3. 模块标签:全是 [WLAN],说明问题出在WiFi驱动层,不是应用层
  4. 关键信息:认证响应超时(Auth timeout),路由器没回应

排查方向就很明确了:检查路由器的认证设置,或者看看是不是信号太弱导致报文丢失。

一句话总结: 日志解析入门,就是练就一双“火眼金睛”——一眼看穿时间、等级和模块。这三样搞定了,剩下的就是顺着线索往下挖。

好了,这一章就到这里。下一章咱们聊聊如何用工具高效过滤和搜索日志,让你从“看日志”变成“玩日志”。