控制台日志级别
kernel.printk 是一组四个数值,控制内核日志往控制台输出的行为:控制台级别、默认消息级别、最低控制台级别、启动默认级别,常见值是 4 4 1 7。内核日志级别从 0(EMERG,最严重)到 7(DEBUG,最详细),数值越小越重要;只有级别数值小于控制台级别的消息才会被打印到控制台。这个参数影响的是上屏,不是记录。
基本信息
| 格式 | kernel.printk = 控制台级别 默认消息级别 最低控制台级别 启动默认级别 |
|---|---|
| 常见默认值 | 4 4 1 7 |
| 级别范围 | 0(EMERG)到 7(DEBUG),数值越小越重要 |
| 等价文件 | /proc/sys/kernel/printk |
| 临时调整 | dmesg -n 级别,仅当前会话生效 |
典型使用场景
- 串口控制台被大量内核日志拖慢,虚拟机与云主机常见
- 排障时需要临时看到更低级别(更详细)的内核信息
- 控制台输出影响启动速度或串口吞吐时收敛输出量
- 区分「控制台不显示」与「日志没有记录」这两种现象
- 安全审计:级别过宽会把内核调试信息暴露给控制台访问者
查看与调整
查看与调整
cat /proc/sys/kernel/printk # 直接读四元组
sysctl kernel.printk # 等价的读取方式
sysctl -w kernel.printk='4 4 1 7' # 临时恢复常见默认值
dmesg -n 3 # 本会话降低控制台输出量(重启失效)
dmesg -T | tail -20 # 缓冲区记录仍在,dmesg 不受 printk 影响
dmesg -w # 实时跟随内核消息观察效果四元组逐项读法
| 位置 | 名称 | 含义 |
|---|---|---|
| 第 1 个 | console_loglevel | 级别数值小于它的消息才打印到控制台 |
| 第 2 个 | default_message_loglevel | 未显式带级别的消息使用的默认级别 |
| 第 3 个 | minimum_console_loglevel | 控制台级别允许被调低的下限 |
| 第 4 个 | default_console_loglevel | 启动时使用的控制台级别 |
判定方向容易记反:内核只把级别数值小于控制台级别的消息送上控制台,所以第一个数调小是少打印、调大是多打印。
printk 只影响控制台输出,不减少 dmesg 环形缓冲区里的记录量;两条路径要分开判断。