printk的语法是
printk ("log level" "message", <arguments>);
内核在文件 printk.h 中定义了 8 个日志级别
#define KERN_EMERG "<0>" /* system is unusable*/
#define KERN_ALERT "<1>" /* action must be taken immediately*/
#define KERN_CRIT "<2>" /* critical conditions*/
#define KERN_ERR "<3>" /* error conditions*/
#define KERN_WARNING "<4>" /* warning conditions*/
#define KERN_NOTICE "<5>" /* normal but significant condition*/
#define KERN_INFO "<6>" /* informational*/
#define KERN_DEBUG "<7>" /* debug-level messages*/
每个日志级别对应一个数字,数字越小消息的重要性越高。
级别有助于决定在控制台上应该向用户显示什么以及不应该显示什么。
每个控制台都有一个称为控制台日志级别的日志级别,任何日志级别编号小于控制台日志级别的消息都会显示在控制台上,其他日志级别编号高于或等于控制台日志的消息级别记录在内核日志(内核缓冲区)中,可以使用命令“dmesg”查看。
可以通过查看文件 /proc/sys/kernel/printk 找到控制台日志级别
$ cat /proc/sys/kernel/printk
4 4 1 7
输出中的第一个数字是控制台日志级别,第二个是默认日志级别,第三个是最小日志级别,第四个是最大日志级别。
日志级别 4 对应于 KERN_WARNING。因此,所有日志级别为 3、2、1 和 0 的消息都将显示在屏幕上并被记录下来,而日志级别为 4、5、6、7 的消息只会被记录下来,并且可以使用“dmesg”查看。
控制台日志级别可以通过写入proc条目来改变
$ echo "6" > /proc/sys/kernel/printk
$ cat /proc/sys/kernel/printk
6 4 1 7
现在控制台日志级别设置为 6,即 KERN_INFO。
在这里您要打印出每条消息,因此您应该将控制台级别设置为最高数字“8”
echo "8" > /proc/sys/kernel/printk
tail -f /var/log/kern.log &
或
cat /proc/kmsg & (Android Environment)