レベル別にフィルタリングされた printk メッセージを受信時に表示するにはどうすればよいですか?

レベル別にフィルタリングされた printk メッセージを受信時に表示するにはどうすればよいですか?

私は、ALERT レベルでロードされたときに printk を実行し、INFO レベルでリリースされたときに別の printk を実行する hello word モジュールを作成しました。

#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>

関連情報