Skip to content

# 17.3. log接口使用推荐

## 17.3.1. kernel

1. 在驱动中推荐使用如下接口dev_err, dev_warn, dev_info, dev_dbg。

2. 没有设备结构的场合使用如下接口pr_error, pr_warn, pr_info, pr_debug。

3. pr_debug，dev_debug可通过如下方法动态开启。

   - echo “file drivers/mmc/host/* +p” >/sys/kernel/debug/dynamic_debug/control

4. 对于出错后可能重复非常多次的打印，用如下接口。

   - printk_once: 只打印一次

   - printk_ratelimited: 限制每秒打印次数，默认每5秒最多打印10次

## 17.3.2. 应用程序

1. 推荐使用pr的接口，对应的打印级别有pr_verbose、pr_debug、pr_info、pr_warn、pr_err、pr_fatal、pr_verbose_with_tag、pr_debug_with_tag、pr_info_with_tag、pr_warn_with_tag、pr_err_with_tag、pr_fatal_with_tag。

2. 使用pr* 接口时，各个模块在输出Log时，可以通过定义LOG_TAG宏来打印自身模块名，logcat支持使用tag筛选日志。其可通过Makefile传入，如：DLOG_TAG=camera；或者在代码开头声明。

3. 使用pr* _tag接口时，各个模块在输出Log时，可以通过第一个参数来打印自身模块名，logcat支持使用tag筛选日志。

4. log系统支持1个2MB的log_main缓冲区，1个256KB的log_radio缓冲区，建议使用log_main缓冲区。

   - 当LOG_TAG是”HTC_RIL”、”RIL”、”IMS”、”AT”、”GSM”、”STK”、”CDMA”、”PHONE”、”SMS”时，日志保存到log_radio缓冲区，其他的都保存到log_main缓冲区。

5. 代码示例和测试结果如下：

       //aarch64-linux-gnu-gcc logtest.c -o logtest -L . -lalog -I include/
       #define LOG_TAG "alog_test"
       #include <stdio.h>
       #include <logging.h>

       int main(int argc, char **argv)
       {
          pr_verbose("*ALOG test start*\n");
          pr_debug("********1********\n");
          pr_info("********2********\n");
          pr_warn("********3********\n");
          pr_err("********4********\n");
          pr_verbose("*ALOG test end***\n");
          return 0;
       }

       # 测试结果：
       root@hobot:/# ./logtest

       # 不设置过滤：
       root@hobot:/# logcat
       logcat test start !!!
       --------- beginning of /dev/log_main
       V/alog_test(21590): *ALOG test start*
       D/alog_test(21590): ********1********
       I/alog_test(21590): ********2********
       W/alog_test(21590): ********3********
       E/alog_test(21590): ********4********
       V/tag     (21590): ********1********
       D/tag     (21590): ********1********
       I/tag     (21590): ********2********
       W/tag     (21590): ********3********
       E/tag     (21590): ********4********
       F/tag     (21590): ********1********
       V/alog_test(21590): *ALOG test end***

       设置过滤-s *:F
       root@hobot:/# logcat -s *:F
       logcat test start !!!
       --------- beginning of /dev/log_main
       F/tag     (21590): ********1********

       设置过滤-s *:E
       root@hobot:/# logcat -s *:E
       logcat test start !!!
       --------- beginning of /dev/log_main
       E/alog_test(21590): ********4********
       E/tag     (21590): ********4********
       F/tag     (21590): ********1********

       设置过滤-s tag:E
       root@hobot:/# logcat -s tag:E
       logcat test start !!!
       --------- beginning of /dev/log_main
       E/tag     (21590): ********4********
       F/tag     (21590): ********1********

## 17.3.3. mcu

1. 推荐使用LogSync接口。

## 17.3.4. dsp

1. 推荐使用DSP_ERR、DSP_WARN、DSP_INFO、DSP_DBG接口。