log level

一、LK层:

首先,在LK中,有一个对log打印级别的控制文档,其路径一般为:

vendor\mediatek\proprietary\bootable\bootloader\lk\include\debug.h(以mtk平台为例)

在include\debug.h重要代码为:

​
//下面做个判断:意思是如果makefile(相应的平台mk文件) 定义了DEBUG的值,就是用它,否则默认为2等级
//在bootloader\lk\project\rlk6737m_65_n.mk中:DEBUG := 2
#if defined(DEBUG)
#define DEBUGLEVEL DEBUG
#else
#define DEBUGLEVEL 2
#endif

/* debug levels 调试级别*/  

#define CRITICAL 0      //数字越小级别越高,打印的信息log越少
#define ALWAYS 0
#define INFO 1
#define SPEW 2

/* output */  输出方式介绍

void _dputc(char c); // XXX for now, platform implements  平台工具
int _dputs(const char *str);
int _dprintf(const char *fmt, ...) __PRINTFLIKE(1, 2);
int _dvprintf(const char *fmt, va_list ap);

//下面的这些打印方法具体含义是:如果级别<=之前定义的调试级别的话就打印否则不打印

#define dputc(level, str) do { if ((level) <= DEBUGLEVEL) { _dputc(str); } } while (0)  
#define dputs(level, str) do { if ((level) <= DEBUGLEVEL) { _dputs(str); } } while (0)
#define dprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dprintf(x); } } while (0)
#define dvprintf(level, x...) do { if ((level) <= DEBUGLEVEL) { _dvprintf(x); } } while (0)

二、kernel层:

在kernel-3.18\include\linux\kern_levels.h中定义了打印级别:

(以前定义在kernel-3.18\include\linux\kernel.h)

#define KERN_SOH    "\001"        /* ASCII Start Of Header */
#define KERN_SOH_ASCII    '\001'

#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 调试级别信息*/

#define KERN_DEFAULT    KERN_SOH "d"    /* the default kernel loglevel 默认的内核loglevel----一般都为4*/

在kernel-3.18\include\linux\printk.h中定义了各默认日志的级别

/* printk's without a loglevel use this.. 没有日志级别的printk使用*/
#define MESSAGE_LOGLEVEL_DEFAULT CONFIG_MESSAGE_LOGLEVEL_DEFAULT

/* We show everything that is MORE important than this..我们展示了所有比这更重要的东西 */
#define CONSOLE_LOGLEVEL_SILENT  0 /* Mum's the word */
#define CONSOLE_LOGLEVEL_MIN     1 /* Minimum loglevel we let people use最低的控制台日志级别*/
#define CONSOLE_LOGLEVEL_QUIET     4 /* Shhh ..., when booted with "quiet"默认的消息日志级别*/
#define CONSOLE_LOGLEVEL_DEFAULT 7 /* anything MORE serious than KERN_DEBUG 默认的控制台日志级别*/

#define CONSOLE_LOGLEVEL_DEBUG    10 /* issue debug messages */
#define CONSOLE_LOGLEVEL_MOTORMOUTH 15    /* You can't shut this one up */

extern int console_printk[];

#define console_loglevel (console_printk[0])
#define default_message_loglevel (console_printk[1])
#define minimum_console_loglevel (console_printk[2])

在这里注意一下:有些人在写printk()时,并不加log级别,这是如果我们定义的log级别小于4,则它是打印不出来的,因为不写log级别的打印内核默认为4打印级别。

在kernel-3.18\kernel\printk\printk.c中:

int console_printk[4] = {
    CONSOLE_LOGLEVEL_DEFAULT,    /* console_loglevel控制log级别 */
    MESSAGE_LOGLEVEL_DEFAULT,    /* default_message_loglevel默认的消息日志级别 */
    CONSOLE_LOGLEVEL_MIN,        /* minimum_console_loglevel最低的控制台日志级别*/
    CONSOLE_LOGLEVEL_DEFAULT,    /* default_console_loglevel默认的控制台日志级别 */
};


转自:android 设置打印级别_jlgcumt的博客-CSDN博客

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值