内核通过prink()函数输出相关信息时是要根据日志等级来输出的:
一、若没有指明消息日志等级则使用默认等级4,在kernel/printk.c里面有下面一个宏定义:
输入:cat /proc/sys/kernel/printk
打印:6 4 1 7
这四个数字分别代表的意思就是:
控制台日志级别为6、默认的消息日志级别为4、最小(等级最高)允许设置控制台日志级别为1 、默认的控制台日志级别为7
注意:当 printk中指定的级别数值上小于(即:级别高于)当前控制台日志级别时,printk的信息(要有\n符)就会在控制台上显示,但无论当前控制台日志级别是何值,通过 dmesg 总能查看
可以通过echo命令设置日志等级:
echo 8 > /proc/sys/kernel/printk
这样所有的消息都可以在控制台上面打印
二、有指定内核日志级别:
在 include/linux/kernel.h 中定义了如下8个日志级别
printk()指定级别的方法:
(1)直接用数字指定日志级别,用尖括号括起来
printk(<2> "Hello world!\n");
(2)使用上面讲到的宏定义
printk(KERN_ALERT "Hello world!\n");
一、若没有指明消息日志等级则使用默认等级4,在kernel/printk.c里面有下面一个宏定义:
/* printk's without a loglevel use this.. */
#define DEFAULT_MESSAGE_LOGLEVEL 4 /* KERN_WARNING 默认日志等级 */
/* We show everything that is MORE important than this.. */
#define MINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */
#define DEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */
DECLARE_WAIT_QUEUE_HEAD(log_wait);
int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL, /* console_loglevel */
DEFAULT_MESSAGE_LOGLEVEL, /* default_message_loglevel */
MINIMUM_CONSOLE_LOGLEVEL, /* minimum_console_loglevel */
DEFAULT_CONSOLE_LOGLEVEL, /* default_console_loglevel */
};
我们在命令终端输入:cat /proc/sys/kernel/printk
打印:6 4 1 7
这四个数字分别代表的意思就是:
控制台日志级别为6、默认的消息日志级别为4、最小(等级最高)允许设置控制台日志级别为1 、默认的控制台日志级别为7
注意:当 printk中指定的级别数值上小于(即:级别高于)当前控制台日志级别时,printk的信息(要有\n符)就会在控制台上显示,但无论当前控制台日志级别是何值,通过 dmesg 总能查看
可以通过echo命令设置日志等级:
echo 8 > /proc/sys/kernel/printk
这样所有的消息都可以在控制台上面打印
二、有指定内核日志级别:
在 include/linux/kernel.h 中定义了如下8个日志级别
#define KERN_EMERG "<0>" /* 紧急事件消息:系统崩溃,表示系统不可用 */
#define KERN_ALERT "<1>" /* 必须紧急处理 */
#define KERN_CRIT "<2>" /* 临界条件,严重的硬软件错误 */
#define KERN_ERR "<3>" /* 报告错误 */
#define KERN_WARNING "<4>" /* 警告,不指定时默认的级别也是“4” */
#define KERN_NOTICE "<5>" /* 普通但还是须注意 */
#define KERN_INFO "<6>" /* 信息 */
#define KERN_DEBUG "<7>" /* 调试信息 */
值越小紧急程度越高!printk()指定级别的方法:
(1)直接用数字指定日志级别,用尖括号括起来
printk(<2> "Hello world!\n");
(2)使用上面讲到的宏定义
printk(KERN_ALERT "Hello world!\n");