Wie werden Printk-Meldungen nach Ebene gefiltert angezeigt, sobald sie eingehen?

Wie werden Printk-Meldungen nach Ebene gefiltert angezeigt, sobald sie eingehen?

Ich habe ein Hello-Word-Modul geschrieben, das einen Printk ausführt, wenn es auf der Ebene ALERT geladen wird, und einen weiteren Printk, wenn es auf der Ebene INFO freigegeben wird:

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

Dann habe ich versucht, die Kernel-Meldungen nach Level zu filtern. Dazu habe ich dmesg -l verwendet. Ich möchte die Meldungen aber so sehen, wie sie erscheinen. Deshalb habe ich

tail -f /var/log/kern.log

Mit diesem Befehl kann ich die Nachrichten sehen, aber wie kann ich die Nachrichten nach Level filtern?

Ich verwende Ubuntu 14.04 mit Kernel 3.16.4

Anschließend habe ich versucht, die Nachrichten mit folgendem Befehl auf der Konsole auszugeben:

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

Es wird jedoch keine Meldung auf der Konsole ausgegeben. Ich habe versucht, die Konsolenebene mit dmesg -n alert einzustellen, aber das funktioniert auch nicht. Daher bin ich mir nicht sicher, was das Einstellen der Konsolenebene mit dmesg oder /proc/sys/kernel/printk bewirkt.

Wie kann ich diese Ebenen effizient nutzen?

Vielen Dank für Ihre Hilfe

Antwort1

Unter Ubuntu 16.04, Util-Linux 2.27.1 können Sie Folgendes tun:

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

Wo:

  • -wverfolgt die Nachrichten, sobald sie eingehen
  • --levelschränkt ein, welche Ebenen angezeigt werden
  • --rawzeigt den Pegel am Anfang der Meldung an, z. B. als<3>

verwandte Informationen