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)--->

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級別

要想提升特定文件的日誌輸出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_LEVWL=ESP_LOG_DEBUG

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);

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章