zoukankan      html  css  js  c++  java
  • 如何屏蔽LOGDLOGI等打印输出

    今天被打印信息的去除困扰了,想了想,如果靠一个一个的改动未免太繁琐。因此就仔细的看了下这部分的打印原理。当然下面只是简单的进行了知识罗列不过有需要的朋友可以随便看看。说不准会有些收获呢。

    Include/linux/printk.h中有如下定义:

    #defineKERN_EMERG

    "<0>"

    /* system is unusable

    */

    #defineKERN_ALERT

    "<1>"

    /* action must be taken immediately

    */

    #defineKERN_CRIT

    "<2>"

    /* critical conditions

    */

    #defineKERN_ERR

    "<3>"

    /* error conditions

    */

    #defineKERN_WARNING

    "<4>"

    /* warning conditions

    */

    #defineKERN_NOTICE

    "<5>"

    /* normal but significant condition

    */

    #defineKERN_INFO

    "<6>"

    /* informational

    */

    #defineKERN_DEBUG

    "<7>"

    /* debug-level messages

    */

    /*Use the default kernel loglevel */

    #defineKERN_DEFAULT

    "<d>"

    /*

    *Annotation for a "continued" line of log printout (only done after a

    *line that had no enclosing ). Only to be used by core/arch code

    *during early bootup (a continued line is not SMP-safe otherwise).

    */

    #defineKERN_CONT

    "<c>"

    externint console_printk[];

    #defineconsole_loglevel (console_printk[0])

    #definedefault_message_loglevel (console_printk[1])

    #defineminimum_console_loglevel (console_printk[2])

    #definedefault_console_loglevel (console_printk[3])

    这样定义了通常使用的prink函数调用时的参数。通过上面的定义可以清晰的看到系统默认的loglevel,包括日志级别和控制台级别。

    /*printk's without a loglevel use this.. */

    #defineDEFAULT_MESSAGE_LOGLEVEL CONFIG_DEFAULT_MESSAGE_LOGLEVEL

    /*We show everything that is MORE important than this.. */

    #defineMINIMUM_CONSOLE_LOGLEVEL 1 /* Minimum loglevel we let people use */

    #defineDEFAULT_CONSOLE_LOGLEVEL 7 /* anything MORE serious than KERN_DEBUG */

    DECLARE_WAIT_QUEUE_HEAD(log_wait);

    intconsole_printk[4] = {

    DEFAULT_CONSOLE_LOGLEVEL,

    /* console_loglevel */

    DEFAULT_MESSAGE_LOGLEVEL,

    /* default_message_loglevel */

    MINIMUM_CONSOLE_LOGLEVEL,

    /* minimum_console_loglevel */

    DEFAULT_CONSOLE_LOGLEVEL,

    /* default_console_loglevel */

    };

    通过上面的了解,可以知道当linux内核启动之后,能够看到那些级别的log信息。当然很多情况下,添加打印信息都是为了方便调试,当系统启动之后,很有可能我们变得很讨厌添加的log信息,或者想看到某个级别的信息。此时如果重新编译kernel然后烧写就会很浪费时间。这种情况下,应该最好能及时的修改日志级别看到真正想要看到的log 信息。

    既然有这样的需求,那么linux能否提供呢?

    答案当然不出意料,在linux中的特殊的文件proc中,就有这样可以进行操作的文件。

    使用如下命令查看现在的printk的情况:

    #cat /proc/sys/kernel/printk

    7 4 1 7

    对照上面的信息,就知道现在console中的级别为7,为了屏蔽部分信息,可以通过如下命令

    #echo 4 > /proc/sys/kernel/printk

    LOGELOGDLOGI等宏定义一般都是某个公司自己内部定义使用的打印函数,一般定义在board端的一个log-private.h文件中 ,被log.h文件引用之后,被hardware.h文件引用。在驱动中的头文件如果包含了这个头文件,那么程序中就可以使用LOGI的打印宏定义。

    转至:http://blog.csdn.net/codectq/article/details/24734269

  • 相关阅读:
    用C++发邮件
    python打包程序py2exe实战
    分享:Python: 数据分析资源
    Socket传输文件时进行校验(简单解决TCP粘包问题)
    第二回 基类的架造方法应该为子类想的多一些
    第一回 要想知道为什么抽象出基类,应该先对基类有一个比较明确的认识
    树型结构~无限级联下拉列表框
    为什么我要将数据库上下文进行抽象,为它生产一个基类有用吗~目录
    将不确定变为确定~真的是SqlDataReader引起的超时?
    张学友 《她来听我的演唱会》
  • 原文地址:https://www.cnblogs.com/Ph-one/p/4418101.html
Copyright © 2011-2022 走看看