快速答案
将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
|