printk消息日志等级

本文介绍了Linux内核printk函数的日志等级机制。默认日志等级为4(KERN_WARNING),控制台日志级别可通过`/proc/sys/kernel/printk`查看和设置。printk指定级别包括8个等级,从KERN_EMERG(紧急事件)到KERN_DEBUG(调试信息),值越小表示紧急程度越高。可以通过echo命令调整日志等级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内核通过prink()函数输出相关信息时是要根据日志等级来输出的:
一、若没有指明消息日志等级则使用默认等级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");






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值