一、若沒有指明消息日誌等級則使用默認等級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");