1、背景
今天有點時間,因此對ESP32 的日誌輸出做一次學習。
1.1 資料
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
- warningESP_LOGI
- infoESP_LOGD
- debugESP_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);