如何顯示按級別過濾的 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>

相關內容