linux核心列印級別問題

2021-06-19 10:12:38 字數 1999 閱讀 4685

函式printk的使用方法和printf相似,用於核心列印訊息。printk根據日誌級別(loglevel)對訊息進行分類。日誌級別用巨集定義,日誌級別巨集展開為乙個字串,在編譯時由預處理器將它和訊息文字拼接成乙個字串,因此printk 函式中日誌級別巨集和格式字串間不能有逗號。

下面是兩個printk的例子,乙個用於列印除錯資訊,另乙個用於列印臨界條件資訊。

printk(kern_debug "here i am: %s:%i/n", _ _file_ _, _ _line_ _); 

printk(kern_crit "i'm trashed; giving up on %p/n", ptr);

printk的日誌級別定義如下(在linux26/includelinux/kernel.h中):

#definekern_emerg"<0>"

#definekern_alert"<1>"

#definekern_crit"<2>"

#definekern_err"<3>"

#definekern_warning"<4>"

#definekern_notice"<5>"

#definekern_info"<6>"

#definekern_debug"<7>"

extern int console_printk;

#define console_loglevel  (console_printk[0])

#define default_message_loglevel  (console_printk[1])

#define minimum_console_loglevel  (console_printk[2])

#define default_console_loglevel  (console_printk[3])

日誌級別的範圍是0~7,沒有指定日誌級別的printk語句預設採用的級別是 default_ message_loglevel,其定義列出如下(在linux26/kernel/printk.c中):

#define default_message_loglevel 4

核心可把訊息列印到當前控制台上,可以指定控制台為字元模式的終端或印表機等。預設情況下,「控制台」就是當前的虛擬終端。

為了更好地控制不同級別的資訊顯示在控制台上,核心設定了控制台的日誌級別console_loglevel。printk日誌級別的作用是列印一定級別的訊息,與之類似,控制台只顯示一定級別的訊息。

當日誌級別小於console_loglevel時,訊息才能顯示出來。控制台相應的日誌級別定義如下:

#define minimum_console_loglevel  1   

#define default_console_loglevel  7

int console_printk[4] = ;

如果系統執行了klogd和syslogd,則無論console_loglevel為何值,核心訊息都將追加到/var/log/messages中。如果klogd沒有執行,訊息不會傳遞到使用者空間,只能檢視/proc/kmsg。

變數console_loglevel的初始值是default_console_loglevel,可以通過sys_syslog系統呼叫進行修改。呼叫klogd時可以指定-c開關選項來修改這個變數。如果要修改它的當前值,必須先殺掉klogd,再加-c選項重新啟動它。

注:#ps -e 檢視所有程序pid,然後kill。

通過讀寫/proc/sys/kernel/printk檔案可讀取和修改控制台的日誌級別。檢視這個檔案的方法如下:

#cat /proc/sys/kernel/printk

6 4 1 7

上面顯示的4個資料分別對應控制台日誌級別、預設的訊息日誌級別、最低的控制台日誌級別和預設的控制台日誌級別。

可用下面的命令設定當前日誌級別:

# echo 8 > /proc/sys/kernel/printk
來自:

linux核心列印級別

1.printk 是乙個核心的乙個記錄日誌的機制,經常用來記錄資訊或者警告。printk可以指定輸出日誌的優先順序,在include linux kern levels.h中有相應的巨集定義 1 define kern soh 001 ascii start of header 2 define k...

隔離級別問題彙總

隔離級別分類 事務隔離級別 髒讀不可重複讀 幻讀讀未提交是是 是不可重複讀否是 是可重複讀否否 是序列化否否 否什麼是幻讀 事務a 按照一定條件進行資料讀取,期間事務b 插入了相同搜尋條件的新資料,事務a再次按照原先條件進行讀取時,發現了事務b新插入的資料稱為幻讀。如果事務a 按一定條件搜尋,期間事...

linux核心的列印printk的級別

有時除錯核心模組,列印資訊太多了,可以通過修改 proc sys kernel printk檔案內容來控制。預設設定是6 4 1 7 cat proc sys kernel printk 7 4 1 7 該檔案有四個數字值,它們根據日誌記錄訊息的重要性,定義將其傳送到何處。關於不同日誌級別的更多資訊...