ESP32 关于LOGGING

1、背景

今天有点时间,因此对ESP32 的日志输出做一次学习。

1.1 资料

https://docs.espressif.com/projects/esp-idf/zh_CN/v3.3/api-reference/system/log.html?highlight=Logging%20to%20Host 

https://www.cnblogs.com/jiangmitiao/p/9749720.html  

2 Esp32 logging 官方资料理解

使用日志功能的推荐方法如下

在每个.c文件中定义TAG常量如下

static const char * TAG = "MyModule";

日志输出方式

ESP_LOGI(TAG,"Baud rate error %.1f%%. Requested: %d baud, actual: %d baud", error * 100, baud_req, baud_real);

根据日志的重要程度level(详细程度),有如下几个宏定义

  • ESP_LOGE - error (lowest)  等级最高
  • ESP_LOGW - warning
  • ESP_LOGI - info
  • ESP_LOGD - debug
  • ESP_LOGV - verbose (highest) 等级最低

2.1LOGGING 日志的level 生效的两个阶段

1、编译阶段

在menuconfig中,用CONFIG_LOG_DEFAULT_LEVEL 选项。

设置Bootload日志等级 Bootloader config   --->Bootloader log verbosity(Info)--->

设置app日志等级 Component config --->Log output--->Defualt log verbosity(Info)--->

要想提升特定文件的日志输出level超过CONFIG_LOG_DEFAULT_LEVEL,必须在编译是通过LOG_LOCAL_LEVEL 宏来设定。

在文件范围内,覆盖默认LOG等级,采用在#include "esp_log.h" 之前定义LOG_LOCAL_LEVEL宏

#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE

#include "esp_log.h"

对于组件范围,在组件的component.mk里定义如下

CFLAGS += -D LOG_LOCAL_LEVEL=ESP_LOG_DEBUG

 

2、运行阶段

用esp_log_level_set()接口来设置日志等级。注意采用这种方式不能使日志的level超过CONFIG_LOG_DEFAULT_LEVEL。

用esp_log_level_set()对于每个模块配置日志输出等级

esp_log_level_set("*", ESP_LOG_ERROR);        // 所有组件的日志等级都设置为ERROR级别
esp_log_level_set("wifi", ESP_LOG_WARN);      // 使能wifi堆栈的日志等级为LOGS级别
esp_log_level_set("dhcpc", ESP_LOG_INFO);     // 使能dhcpc堆栈的日志等级为LOGS级别

2.2 实例

 

假设CONFIG_LOG_DEFAULT_LEVEL设置为ESP_LOG_DEBUG等级之上(ESP_LOG_VERBOSE或ESP_LOG_DEBUG),则下面代码意思为全部组件日志等级为ESP_LOG_INFO,而TAG所标识的组件,日志等级为ESP_LOG_DEBUG。

 /**
     * @brief Set the log level for serial port printing.
     */
    esp_log_level_set("*", ESP_LOG_INFO);
    esp_log_level_set(TAG, ESP_LOG_DEBUG);

 

 

 

 

你可能感兴趣的:(ESP32开发)