Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6478416
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16635
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: LINUX

2014-10-10 16:26:37

日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):  

#define KERN_EMERG 0/*紧急事件消息,之前提示,表示系统不可用*/  

#define KERN_ALERT 1/*报告消息,表示必须立即采取措施*/  

#define KERN_CRIT 2/*临界条件,通常涉及严重的硬件或操作失败*/  

#define KERN_ERR 3/*错误条件,驱动程序常用KERN_ERR来报告硬件的错误*/  

#define KERN_WARNING 4/*警告条件,对可能出现问题的情况进行警告*/  

#define KERN_NOTICE 5/*正常但又重要的条件,用于提醒*/  

#define KERN_INFO 6/*提示信息,如驱动程序启动时,打印硬件信息*/  

#define KERN_DEBUG 7/*调试级别的消息*/


没有指定日志级别的printk语句默认采用的级别是:DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为<4>,即与KERN_WARNING在一个级别上),其定义在kernel/printk.c中可以找到。

内核可把消息打印到当前控制台上,可以指定控制台为字符模式的终端或打印机等。默认情况下,“控制台”就是当前的虚拟终端。

为了更好地控制不同级别的信息显示在控制台上,内核设置了控制台的日志级别console_loglevel。printk日志级别的作用是打印一定级别的消息,与之类似,控制台只显示一定级别的消息。

当日志级别小于console_loglevel时,消息才能显示出来。控制台相应的日志级别定义如下:

 

#define MINIMUM_CONSOLE_LOGLEVEL  1   
#define DEFAULT_CONSOLE_LOGLEVEL  7 

int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL,

DEFAULT_MESSAGE_LOGLEVEL,

MINIMUM_CONSOLE_LOGLEVEL,
DEFAULT_CONSOLE_LOGLEVEL,
}; 

 

如果系统运行了klogd和syslogd,则无论console_loglevel为何值,内核消息都将追加到/var/log/messages中。如果klogd没有运行,消息不会传递到用户空间,只能查看/proc/kmsg。


     变量console_loglevel的初始值是DEFAULT_CONSOLE_LOGLEVEL,可以通过sys_syslog系统调用进行修改。调用klogd时可以指定-c开关选项来修改这个变量。如果要修改它的当前值,必须先杀掉klogd,再加-c选项重新启动它。
通过读写/proc/sys/kernel/printk文件可读取和修改控制台的日志级别。查看这个文件的方法如下:

 

 

#cat /proc/sys/kernel/printk
6   4  1   7 

 

上面显示的4个数据分别对应控制台日志级别、默认的消息日志级别、最低的控制台日志级别和默认的控制台日志级别。

可用下面的命令设置当前日志级别:

# echo 8 > /proc/sys/kernel/printk 
 
  这样所有级别<8,(0-7)的消息都可以显示在控制台上.


参考:
1,http://blog.csdn.net/skyflying2012/article/details/7968545
阅读(1660) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~