如何显示按级别过滤的 printk 消息?

如何显示按级别过滤的 printk 消息?

我编写了一个 hello word 模块,当它在级别 ALERT 中加载时执行 printk,并在级别 INFO 中释放时执行另一个 printk:

#include <linux/module.h>
#include <linux/kernel.h>

MODULE_LICENSE("GPL");

static int init_hello(void)
{
    printk(KERN_ALERT "init called in hello\n");
    return 0;
}

static void cleanup_hello(void)
{
    printk(KERN_INFO "cleanup called in hello\n");
}

module_init(init_hello);
module_exit(cleanup_hello);

然后我尝试按级别过滤内核消息,我使用 dmesg -l 做到了这一点,但我想查看出现的消息,所以我使用

tail -f /var/log/kern.log

使用此命令我可以看到消息,但如何按级别过滤消息?

我正在使用内核为 3.16.4 的 Ubuntu 14.04

然后我尝试使用以下命令将消息打印到控制台:

echo 7 7 7 7 > /proc/sys/kernel/printk

但它不会向控制台打印任何消息。我尝试使用 dmesg -n Alert 设置控制台级别,但它也不起作用,因此我不确定通过 dmesg 或 /proc/sys/kernel/printk 设置控制台级别会做什么。

我怎样才能有效地使用这些级别?

感谢您的帮助

答案1

在 Ubuntu 16.04、util-linux 2.27.1 上,您可以执行以下操作:

dmesg --level err,warn --raw -w

在哪里:

  • -w跟随消息的到来
  • --level限制将显示哪些级别
  • --raw显示消息开头的级别,例如<3>

相关内容