第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细节。
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 如何识别不规范的标签
不是所有日志都这么规整。有些厂商的日志,模块标签可能藏在行首、行尾,甚至没有标签。我教你一个笨办法:
- 先看日志的前几行,找规律
- 如果发现某些关键词反复出现(比如
wlan0、hci0),那它可能就是隐式的模块标签 - 实在不行,就按功能分类——跟连接有关的归到连接模块,跟数据有关的归到数据模块
[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
一步步拆解:
- 时间戳:从5678秒开始,到5679秒结束,整个过程约1秒
- 等级:先是Info,然后是Debug,接着Warning,最后Error。典型的“逐渐恶化”模式
- 模块标签:全是
[WLAN],说明问题出在WiFi驱动层,不是应用层 - 关键信息:认证响应超时(Auth timeout),路由器没回应
排查方向就很明确了:检查路由器的认证设置,或者看看是不是信号太弱导致报文丢失。
好了,这一章就到这里。下一章咱们聊聊如何用工具高效过滤和搜索日志,让你从“看日志”变成“玩日志”。