如何修改arm Linux中Printk的等級
#define
#define
#define
#define
#define
#define
#define
#define
從這里也可以看出他們的優(yōu)先級是數(shù)值越小,其緊急和嚴(yán)重程度就越高。
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])
未指定優(yōu)先級的默認(rèn)級別定義在/kernel/printk.c中:
#define DEFAULT_MESSAGE_LOGLEVEL 4
#define MINIMUM_CONSOLE_LOGLEVEL 1
#define DEFAULT_CONSOLE_LOGLEVEL 7
int console_printk[4] = {
};
當(dāng)優(yōu)先級的值小于console_loglevel這個整數(shù)變量的值,信息才能顯示出來。而console_loglevel的初始值DEFAULT_CONSOLE_LOGLEVEL也定義在/kernel/printk.c中:
cat /proc/sys/kernel/printk
4
這個默認(rèn)值是在sysctl.conf中寫的,在系統(tǒng)啟動時就把這個值寫到/proc/sys/kernel/printk這個文件了。也可以使用下面的命令修改其值
echo 0 > /proc/sys/kernel/printk
cat /proc/sys/kernel/printk
0
它們根據(jù)日志記錄消息的重要性,定義將其發(fā)送到何處。關(guān)于不同日志級別的更多信息,請閱讀 syslog(2) 聯(lián)機(jī)幫助頁。該文件的四個值為:
控制臺日志級別:優(yōu)先級高于該值的消息將被打印至控制臺
缺省的消息日志級別:將用該優(yōu)先級來打印沒有優(yōu)先級的消息
最低的控制臺日志級別:控制臺日志級別可被設(shè)置的最小值(最高優(yōu)先級)
缺省的控制臺日志級別:控制臺日志級別的缺省值
以下是我的測試程序和作的相關(guān)的測試。
#include
#include
#include
static int __init pinit(void)
{
printk("<0>goodluck0!n");
printk("<1>goodluck1!n");
printk("<2>goodluck2!n");
printk("<3>goodluck3!n");
printk("<4>goodluck4!n");
printk("<5>goodluck5!n");
printk("<6>goodluck6!n");
printk("<7>goodluck7!n");
printk("<8>goodluck8!n");//雖然沒有這級別,我還是試了一把。目的是看默認(rèn)級別。
return 0;
}
static void __exit pexit(void)
{
printk("<0>goodbey!0n");
printk("<1>goodbey!1n");
printk("<2>goodbey!2n");
printk("<3>goodbey!3n");
printk("<4>goodbey!4n");
printk("<5>goodbey!5n");
printk("<6>goodbey!6n");
printk("<7>goodbey!7n");
}
module_init(pinit);
module_exit(pexit);
在這里我只觀察了四個比較重要的日志文件:messages,kern.log,syslog,debug。這四個文件都在/var/log/這個目錄下。它的日志文件經(jīng)觀察未出現(xiàn)這些printk信息。
cat /proc/sys/kernel/printk
4
在上面這種情況下日志文件的變化情況是:
l
l
l
l
cat /proc/sys/kernel/printk
0
在上面這種情況下日志文件的變化情況是:
l
l
l
l
cat /proc/sys/kernel/printk
7
l
l
l
l
分析結(jié)論:在操作系統(tǒng)是圖形化的界面下測試證明-日志記錄和終端級別是沒有關(guān)系的,但是在文本界面下的結(jié)果和這里是不太一樣的,根據(jù)不同的設(shè)置有些信息會輸出到終端。這里就不多說了。
其次有關(guān)于系統(tǒng)的日志記錄工具有兩種主要的:syslog和klog。
Linux系統(tǒng)中/etc/init.d/sysklogd會啟動2個守護(hù)進(jìn)程:Klogd, Syslogd。
syslog是 Unix 系統(tǒng)的一個常見組件,用于執(zhí)行系統(tǒng)日志記錄活動。syslogd 是它的守護(hù)進(jìn)程。syslogd 從一組日志源(如 /dev/log 和 /dev/klog )中讀取數(shù)據(jù),并按照 /etc/syslog.conf 中的說明處理這些日志消息。通過調(diào)用syslog(),可將應(yīng)用程序日志消息記錄到 syslog 中。syslog 消息采用一種包含可選優(yōu)先級和設(shè)備的標(biāo)準(zhǔn)格式。優(yōu)先級指示消息的緊急程度。設(shè)備指示發(fā)布消息的子系統(tǒng)。/usr/include/syslog.h中定義了它的優(yōu)先級和設(shè)備資源。
klog是一個從Unix內(nèi)核接受消息的設(shè)備klogd 守護(hù)進(jìn)程獲得并記錄 Linux 內(nèi)核信息。通常,syslogd 會記錄 klogd 傳來的所有內(nèi)核信息。
syslogd的配置文件是/etc/syslog.conf。
下面是我機(jī)子上這個文件的部分內(nèi)容。主要是對debug和messages文件要記錄內(nèi)容的設(shè)置。
*.=debug;
*.=info;*.=notice;*.=warn;
評論