关于kernel log level的基础知识

kernel中用printk来打印debug信息,关于printk有一个level的定义。

3.10.40\include\linux\kern_levels.h

#define KERN_EMERG KERN_SOH "0" /* system is unusable */
#define KERN_ALERT KERN_SOH "1" /* action must be taken immediately */
#define KERN_CRIT KERN_SOH "2" /* critical conditions */
#define KERN_ERR KERN_SOH "3" /* error conditions */
#define KERN_WARNING KERN_SOH "4" /* warning conditions */
#define KERN_NOTICE KERN_SOH "5" /* normal but significant condition */
#define KERN_INFO KERN_SOH "6" /* informational */
#define KERN_DEBUG KERN_SOH "7" /* debug-level messages */
上面定义了8个level的优先级,其中0的优先级最高,7的优先级最低。

#define KERN_DEFAULT KERN_SOH "d" /* the default kernel loglevel */
定义了kernel默认的loglevel。

如果KERN_DEFAULT = 4,那么printk默认的loglevel=4,那么0,1,2,3等级的log可以在控制台直接显示,4或4后面的log无法在控制台直接显示。
但是可以通过cat /proc/kmsg或dmesg的方式查看输出内容。

可以使用如下方式进行打印logLevel=1的打印:
printk(KERN_ALERT "word_count_init_sucess \n");
or
printk("1"  "word_count_init_sucess \n");
通过如上方式指定printk的输出优先级。

可以在控制台查看printk和控制台默认输出的logLevel:
shell@coconut:/ # cat /proc/sys/kernel/printk
4 4 1 7
其中第一个参数表示控制台logLevel,第二个参数表示printk默认的logLevel
即目前的设定,printk默认的输出level是4,控制台logLevel=4,表示printk输出level为0,1,2,3才可以在控制台直接显示,现在直接用printk打印是无法显示的,因为logLevel太低。

可以这样修改控制台的logLevel:
echo 8 > /proc/sys/kernel/printk
shell@coconut:/ #cat  /proc/sys/kernel/printk
8 4 1 7
这样printk的输出都可以在控制台显示了,因为printk的level总是会比控制台的高。

你可能感兴趣的:(linux)