printk消息日誌等級

內核通過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");






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章