Como exibir mensagens printk filtradas por nível à medida que chegam?

Como exibir mensagens printk filtradas por nível à medida que chegam?

Eu escrevi um módulo hello word que executa um printk quando é carregado no nível ALERT e outro printk quando é lançado com o nível INFO:

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

Então eu estava tentando filtrar as mensagens do kernel por seu nível, fiz isso usando dmesg -l , mas quero ver as mensagens conforme elas aparecem, então estava usando

tail -f /var/log/kern.log

Usando este comando posso ver as mensagens, mas como posso filtrar as mensagens por nível?

Estou usando o Ubuntu 14.04 com kernel 3.16.4

Tentei então imprimir as mensagens no console usando:

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

Mas não imprime nenhuma mensagem no console. Tentei definir o nível do console usando dmesg -n alert, mas também não funcionou, portanto, não tenho certeza do que a configuração do nível do console por dmesg ou /proc/sys/kernel/printk faz.

Como posso usar esses níveis de forma eficiente?

Obrigado pela ajuda

Responder1

No Ubuntu 16.04, util-linux 2.27.1, você pode fazer:

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

onde:

  • -wsegue as mensagens conforme elas chegam
  • --levelrestringe quais níveis serão exibidos
  • --rawmostra o nível no início da mensagem, por exemplo, como<3>

informação relacionada