linux - 如何在控制台中显示 printk() 消息?

标签 linux linux-kernel kernel printk

printk()打印的信息只有在Alt+Ctrl+F1 ~ F7 控制台。 这些控制台非常不方便调试,因为它们无法回滚。我正在使用 KDE 桌面环境和控制台终端,如何将 printk() 消息重定向到控制台?

最佳答案

printk的语法是

printk ("log level" "message", <arguments>);

内核在文件printk.h中定义了8个日志级别

#define KERN_EMERG "<0>" /* system is unusable*/
#define KERN_ALERT "<1>" /* action must be taken immediately*/
#define KERN_CRIT "<2>" /* critical conditions*/
#define KERN_ERR "<3>" /* error conditions*/
#define KERN_WARNING "<4>" /* warning conditions*/
#define KERN_NOTICE "<5>" /* normal but significant condition*/
#define KERN_INFO "<6>" /* informational*/
#define KERN_DEBUG "<7>" /* debug-level messages*/

每个日志级别对应一个数字,数字越低,消息的重要性越高。

级别有助于决定什么应该在控制台上显示给用户,什么不应该显示。

每个控制台都有日志级别,称为控制台日志级别,任何日志级别编号小于控制台日志级别的消息都会显示在控制台上,其他日志级别编号高于或等于控制台日志的消息级别记录在内核日志(内核缓冲区)中,可以使用命令“dmesg”查看。

可以通过查看文件/proc/sys/kernel/printk 找到控制台日志级别

$ cat /proc/sys/kernel/printk
4 4 1 7

输出中的第一个数字是控制台日志级别,第二个是默认日志级别,第三个是最低日志级别,第四个是最高日志级别。

日志级别 4 对应于 KERN_WARNING。因此,所有日志级别为 3、2、1 和 0 的消息都将显示在屏幕上并记录下来,而日志级别为 4、5、6、7 的消息只会被记录并可以使用“dmesg”查看。

可以通过写入 proc 条目来更改控制台日志级别

$ echo "6" > /proc/sys/kernel/printk
$ cat /proc/sys/kernel/printk
6 4 1 7

现在控制台日志级别设置为 6,即 KERN_INFO。

在这里你想打印出每条消息,所以你应该将你的控制台级别设置为最高数字“8”

echo "8" > /proc/sys/kernel/printk 
tail -f /var/log/kern.log & 

cat /proc/kmsg & (Android Environment)

关于linux - 如何在控制台中显示 printk() 消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27903915/

相关文章:

linux - CUPS Web 界面的工作原理

c - 从 C 中的外部结构返回 NULL 的指针

c - 为什么 last_rx 总是 0?

linux - 在 linux 系统调用中查找用户名

c - 访问特定 UID 的 user_struct

linux - 共享对象中的文本重定位?

linux - Debian 6 (Squeeze) 上的 Puppet 已过时

linux - 当中断处理程序被另一个中断中断时,中断上下文 "restored"是怎样的?

sockets - 为什么最大 netlink 消息大小限制为 16k

ios - iOS 内核位于文件系统的什么位置?