快速答案
将printk设为始终打印到终端(把控制台log等级设为最高的8)。
echo "8" > /proc/sys/kernel/printk
tail -f /var/log/kern.log &
安卓环境用户使用下面的命令:
cat /proc/kmsg &
背景知识:printk 和 log level
printk的语法如下
printk ("log level" "message", <arguments>);
其中,log level指的是这句printk所打印消息的重要性级别。是用来决定哪些信息被打印到终端,展示给用户,哪些留在系统的日志文件(即/var/log/syslog文件)。
Linux内核总共定义了八种重要性级别,具体可以在printk.h文件里找到(也有说法是在linux/kernel.h中)。 具体内容如下:
#define KERN_EMERG "<0>"
#define KERN_ALERT "<1>"
#define KERN_CRIT "<2>"
#define KERN_ERR "<3>"
#define KERN_WARNING "<4>"
#define KERN_NOTICE "<5>"
#define KERN_INFO "<6>"
#define KERN_DEBUG "<7>"
每种重要性级别都对应一个数字。数字越小,重要性越高。
查看日志里的消息
方法一 实时查看日志文件内容。
tail -f /var/log/syslog
方法二 将日志内容打印到终端。
dmesg
改变控制台log等级
控制台也有一个这样的log等级,称为console log level。重要级高于这个等级的消息会被打印在控制台上。其他的只会被记入kernel log(又称为kernel buffer)。可以通过dmesg命令查看。
控制台的log等级可以在/proc/sys/kernel/printk里查看
$ cat /proc/sys/kernel/printk
4 4 1 7
输出结果中的四个数字分别代表控制台log等级,默认log等级,最小log等级,和最大log等级。
由于log等级4代表KERN_WARNING,所以等级0~3的消息会被输出到控制台,4~7的消息只会记录在内核日志里,可以通过dmesg命令查看。
可以通过下面的方式改变控制台log等级。
echo "6" > /proc/sys/kernel/printk
现在再查看,发现控制台的log level被改为了6(KERN_INFO)。
$ cat /proc/sys/kernel/printk
6 4 1 7
参考链接
How can I show printk() message in console? - StackOverflow
|