大家都知道在编写内核程序时,printk()在<linux/kernel.h>中定义了一些用于调试的宏,它们是:
KERN_EMERG "<0>" 系统不可用
KERN_ALERT "<1>" 必须采取措施
KERN_CRIT "<2>" 严重状态
KERN_ERR "<3>" 错误状态
KERN_WARNING "<4>" 警告状态
KERN_NOTICE "<5>" 正常但重要的情况
KERN_INFO "<6>" 消息
KERN_DEBUG "<7>" 调试级别信息
输出的printk()调试信息默认情况是输出到/var/log/message这个日志文件中的。如果想把这些调试信息输出到一些指定的文件中,可以使用本文介绍的这个方法,当然这也就是本文产生的原因。
(1)首先,要在/your_debug_message_path/目录下建立messages、messages-debug、messages-info、messages-notice、messages-warning、messages-err、messages-crit、messages-alert等文件,用来存储调试信息。
(2)然后,为了能分级显示printk()调试信息,要在/etc/syslog.conf文件中添加以下内容:
#+--------------------+
#下面这个文件包含<0-7>的所有printk()调试信息
kern.* /your_debug_message_path/messages
#下面这个文件只包含KERN_DEBUG "<7>"的调试信息
kern.=debug /your_debug_message_path/messages-debug
#下面这个文件只包含KERN_INFO "<6>"的调试信息
kern.=info /your_debug_message_path/messages-info
#下面这个文件只包含KERN_NOTICE "<5>"的调试信息
kern.=notice /your_debug_message_path/messages-notice
#下面这个文件只包含KERN_WARNING "<4>"的调试信息,但是要尽量少使用这个等级的调试
kern.=warning /your_debug_message_path/messages-warning
#下面这个文件只包含KERN_ERR "<3>"的调试信息,但是要尽量少使用这个等级的调试
kern.=err /your_debug_message_path/messages-err
#下面这个文件只包含KERN_CRIT "<2>"的调试信息
kern.=crit /your_debug_message_path/messages-crit
#下面这个文件只包含KERN_ALERT "<1>"的调试信息
kern.=alert /your_debug_message_path/messages-alert
#+----------------------+
这样,就可以cat某个文件看到相应级别的调试信息了。当然,还要reboot一下,这个脚本才可以生效!
在长期使用中,调试信息一定会越来越多,并且文件肯定会越来越大。为了防止messages*系列文件过大,要限制她的大小,下面是相应的脚本。
(3)要在/etc/rc.d/rc.local文件中加入以下内容:
+---------------+
#这是一个用户添加的启动项
/your_debug_message_path/check_message_size/my_logsize_check_shell
+----------------+
(4)建立/your_debug_message_path/checksize_back目录,并在该目录下建立同样的messages、messages-debug、messages-info、messages-notice、messages-warning、messages-err、messages-crit、messages-alert等空文件,作为文件刷新时的样本文件。
(5)编写/your_debug_message_path/check_message_size/my_logsize_check_shell脚本:
#!/bin/sh
#+——————————+
logdir="/your_debug_message_path"
backupdir="/your_debug_message_path/checksize_back"
#这是文件的最大值,超过这个值就把/your_debug_message_path/checksize_back目录下的文件
#cat到/your_debug_message_path目录下,刷新过大的文件。
capacity=400000
size=`wc ${logdir}/messages | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages > ${logdir}/messages
fi
size=`wc ${logdir}/messages-alert | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-alert > ${logdir}/messages-alert
fi
size=`wc ${logdir}/messages-crit | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-crit > ${logdir}/messages-crit
fi
size=`wc ${logdir}/messages-err | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-err > ${logdir}/messages-err
fi
size=`wc ${logdir}/messages-info | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-info > ${logdir}/messages-info
fi
size=`wc ${logdir}/messages-notice | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-notice > ${logdir}/messages-notice
fi
size=`wc ${logdir}/messages-warning | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-warning > ${logdir}/messages-warning
fi
size=`wc ${logdir}/messages-debug | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-debug > ${logdir}/messages-debug
fi
#+——————————————+
reboot系统,这个脚本就会生效。
KERN_EMERG "<0>" 系统不可用
KERN_ALERT "<1>" 必须采取措施
KERN_CRIT "<2>" 严重状态
KERN_ERR "<3>" 错误状态
KERN_WARNING "<4>" 警告状态
KERN_NOTICE "<5>" 正常但重要的情况
KERN_INFO "<6>" 消息
KERN_DEBUG "<7>" 调试级别信息
输出的printk()调试信息默认情况是输出到/var/log/message这个日志文件中的。如果想把这些调试信息输出到一些指定的文件中,可以使用本文介绍的这个方法,当然这也就是本文产生的原因。
(1)首先,要在/your_debug_message_path/目录下建立messages、messages-debug、messages-info、messages-notice、messages-warning、messages-err、messages-crit、messages-alert等文件,用来存储调试信息。
(2)然后,为了能分级显示printk()调试信息,要在/etc/syslog.conf文件中添加以下内容:
#+--------------------+
#下面这个文件包含<0-7>的所有printk()调试信息
kern.* /your_debug_message_path/messages
#下面这个文件只包含KERN_DEBUG "<7>"的调试信息
kern.=debug /your_debug_message_path/messages-debug
#下面这个文件只包含KERN_INFO "<6>"的调试信息
kern.=info /your_debug_message_path/messages-info
#下面这个文件只包含KERN_NOTICE "<5>"的调试信息
kern.=notice /your_debug_message_path/messages-notice
#下面这个文件只包含KERN_WARNING "<4>"的调试信息,但是要尽量少使用这个等级的调试
kern.=warning /your_debug_message_path/messages-warning
#下面这个文件只包含KERN_ERR "<3>"的调试信息,但是要尽量少使用这个等级的调试
kern.=err /your_debug_message_path/messages-err
#下面这个文件只包含KERN_CRIT "<2>"的调试信息
kern.=crit /your_debug_message_path/messages-crit
#下面这个文件只包含KERN_ALERT "<1>"的调试信息
kern.=alert /your_debug_message_path/messages-alert
#+----------------------+
这样,就可以cat某个文件看到相应级别的调试信息了。当然,还要reboot一下,这个脚本才可以生效!
在长期使用中,调试信息一定会越来越多,并且文件肯定会越来越大。为了防止messages*系列文件过大,要限制她的大小,下面是相应的脚本。
(3)要在/etc/rc.d/rc.local文件中加入以下内容:
+---------------+
#这是一个用户添加的启动项
/your_debug_message_path/check_message_size/my_logsize_check_shell
+----------------+
(4)建立/your_debug_message_path/checksize_back目录,并在该目录下建立同样的messages、messages-debug、messages-info、messages-notice、messages-warning、messages-err、messages-crit、messages-alert等空文件,作为文件刷新时的样本文件。
(5)编写/your_debug_message_path/check_message_size/my_logsize_check_shell脚本:
#!/bin/sh
#+——————————+
logdir="/your_debug_message_path"
backupdir="/your_debug_message_path/checksize_back"
#这是文件的最大值,超过这个值就把/your_debug_message_path/checksize_back目录下的文件
#cat到/your_debug_message_path目录下,刷新过大的文件。
capacity=400000
size=`wc ${logdir}/messages | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages > ${logdir}/messages
fi
size=`wc ${logdir}/messages-alert | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-alert > ${logdir}/messages-alert
fi
size=`wc ${logdir}/messages-crit | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-crit > ${logdir}/messages-crit
fi
size=`wc ${logdir}/messages-err | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-err > ${logdir}/messages-err
fi
size=`wc ${logdir}/messages-info | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-info > ${logdir}/messages-info
fi
size=`wc ${logdir}/messages-notice | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-notice > ${logdir}/messages-notice
fi
size=`wc ${logdir}/messages-warning | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-warning > ${logdir}/messages-warning
fi
size=`wc ${logdir}/messages-debug | awk "{print \\$3}"`
if [ $size -gt $capacity ]
then
cat ${backupdir}/messages-debug > ${logdir}/messages-debug
fi
#+——————————————+
reboot系统,这个脚本就会生效。