只有当printk打印信息时的loglevel小于console loglevel的值(优先级高于console loglevel),这些信息才会被打印到console上。
改变console loglevel的方法有如下几种:
启动时Kernel boot option:loglevel=level
运行时Runtime: dmesg -n level
(注意:demsg -n level 改变的是console上的loglevel,dmesg命令仍然会打印出所有级别的系统信息。)
运行时Runtime: echo $level > /proc/sys/kernel/printk
echo 8 > /proc/sys/kernel/printk
查看当前控制台的打印等级时,可以使用以下命令:
cat /proc/sys/kernel/printk
使用上述命令后,会打印4个数字,第一个即是当前控制台的打印信息等级。假设当前控制台的打印信息等级为7,那么所有打印信息等级小于等于7的打印信息都可以在控制台打印出来。
///
附加
通过procfs控制printk打印消息查看当前printk打印消息的log等级
cat /proc/sys/kernel/printk
7 4 1 7
1
2
“7 4 1 7” 分别对应console_loglevel、default_message_loglevel、minimum_c onsole_loglevel、default_console_loglevel,意味着只有优先级高于KERN_DEBUG(7)的打印消息才能输出到终端
- 改变console_loglevel
echo 8 4 1 7 > /proc/sys/kernel/printk
1
输入“8 4 1 7”改变console_loglevel值,使得所有的打印消息都能输出到终端
///
- 运行时Runtime:写程序使用syslog系统调用(可以man syslog)
#include <unistd.h>
#include <sys/syscall.h>
static inline int syslog(int type, char *bufp, int len)
{
return syscall(SYS_syslog, type, bufp, len);
}