Debian dmesg日志级别设置指南
小樊
43
2025-12-26 09:32:54
Debian dmesg 日志级别设置指南
一 核心概念与级别
- 内核将日志分为 8 个优先级(0–7,数字越小优先级越高):
- 0 KERN_EMERG:系统不可用
- 1 KERN_ALERT:需立即处理
- 2 KERN_CRIT:严重错误
- 3 KERN_ERR:一般错误
- 4 KERN_WARNING:警告
- 5 KERN_NOTICE:正常但重要
- 6 KERN_INFO:常规信息
- 7 KERN_DEBUG:调试信息
- 控制台日志级别由 /proc/sys/kernel/printk 控制,它是一个包含 4 个整数 的文件:
- 第1个值:当前控制台日志级别(只有优先级“高于或等于”该值的消息才会在控制台显示)
- 第2个值:默认控制台日志级别
- 第3个值:其他控制台(如串口)日志级别上限
- 第4个值:早期控制台(earlyprintk)日志级别上限
- 常用对应关系:dmesg -n 7 将控制台级别设为 7(KERN_DEBUG),显示最详细日志;多数发行版默认级别为 4(KERN_WARNING)。
二 临时调整(立即生效,重启后失效)
- 通过 dmesg 设置控制台级别:
- 显示全部(含调试):sudo dmesg -n 7
- 仅显示警告及以上:sudo dmesg -n 4
- 直接写入 /proc/sys/kernel/printk(等价方式):
- 示例:echo 4 | sudo tee /proc/sys/kernel/printk
- 验证当前设置:cat /proc/sys/kernel/printk
- 示例输出:7 4 1 7(第1个值即当前控制台级别)
- 实时查看新增日志:dmesg -w
- 按级别过滤查看:dmesg -l err,crit;仅看调试:dmesg -l debug
- 提示:临时调整适合排障窗口期使用,避免长期开启大量调试输出。
三 永久生效(重启后保留)
- 使用 sysctl 配置(推荐):
- 追加到配置文件:echo “kernel.printk = 7 4 1 7” | sudo tee -a /etc/sysctl.conf
- 使配置生效:sudo sysctl -p
- 通过 GRUB 设置内核启动参数(影响早期启动日志与默认级别):
- 编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX_DEFAULT 中添加:loglevel=4
- 示例:GRUB_CMDLINE_LINUX_DEFAULT=“quiet loglevel=4”
- 更新引导并重启:sudo update-grub && sudo reboot
- 建议:生产环境优先使用 4(WARNING) 或 6(INFO);调试驱动/硬件问题时再临时提升到 7(DEBUG)。
四 查看与过滤技巧
- 人性化时间:dmesg -H;本地时间:dmesg -T
- 实时监控:dmesg -w
- 关键字过滤:dmesg | grep -i usb;只看错误:dmesg | grep -i error
- 分页与保存:dmesg | less;dmesg > boot.log
- 通过 systemd 查看内核日志:journalctl -k -f(实时)
- 权限提示:普通用户可能无法查看或清空内核日志;必要时可调整 kernel.dmesg_restrict(需谨慎)。
五 注意事项与最佳实践
- 性能与噪声:将级别设为 7(DEBUG) 会产生大量日志,可能轻微增加 CPU/IO 并占用 磁盘/内存,排障完成后请恢复至 4(WARNING) 或 6(INFO)。
- 级别含义:dmesg 的 -n 与 /proc/sys/kernel/printk 使用的是“优先级阈值”,只有消息优先级“高于或等于”该阈值才会被显示;不要把“数字越大越详细”理解为“数字越大越重要”。
- 持久化与回滚:修改 /etc/sysctl.conf 或 GRUB 后务必验证并保留回退方案;变更前可先备份原配置。
- 多控制台场景:/proc/sys/kernel/printk 的 4 个值分别对应当前控制台、默认控制台、其他控制台与早期控制台,生产环境调整时保持后三个值合理,避免遗漏关键输出。