标签:概述 doc 程序 char* warning printf inf tor 堆栈
翻译自https://docs.espressif.com/projects/esp-idf/zh_CN/latest/api-reference/system/log.html?highlight=esp_log_level_set
Log库有两种管理日志详细程度的方法:编译阶段,通过菜单设置;运行阶段,使用esp_log_level_set()函数设置。
日志等级有:错误,警告,信息,调试和详细(详细度从最低到最高)。
在编译阶段,使用CONFIG_LOG_DEFAULT_LEVEL选项过滤。所有登记状态高于CONFIG_LOG_DEFAULT_LEVELD的日志将会被处理器移除。
在运行阶段,所有低于CONFIG_LOG_DEFAULT_LEVEL的日志被默认使能。esp_log_level_set()函数可以用来减少每个某爱的日志等级。模块通过标签识别,这些标签是可读的零结尾的ASCII字符串。
注意esp_log_level_set()函数不能提高到超过CONFIG_LOG_DEFAULT_LEVEL设置的等级。在编译阶段,为了给特殊文件提高日志等级,可以使用LOG_LOCAL_LEVEL宏(详见下)。
在每个C文件里使用日志功能,需要这样定义TAG变量:
static const char* TAG = "MyModule";
然后农户使用一条日志宏来产生输出,比如:
ESP_LOGW(TAG, "Baud rate error %.1f%%. Requestd: %d baud, actual: %d", error * 100, baud_req, baud_real);
以下是一些不同复杂度的日志宏:
. ESP_LOGE - error(lowest)
. ESP_LOGW - warning
. ESP_LOGI -info
. ESP_LOGD -debug
. ESP_LOGV -verbose(highest)
另外有一个_EARLY变量对应以上每一个宏(比如ESP_EARLY_LOGE)。这些变量可以在启动代码中运行,在堆栈分配和系统调用被初始化前。当编译引导程序时,普通的ESP_LOGx宏不像ESP_EARLY_LOGx那么有效。所以ESP_EARLY_LOGx明确的唯一用处是在启动代码里,比如堆栈分配初始化代码。
为了覆盖一个文件或部件作用范围的默认详细度,定义LOG_LOCAL_LEVEL宏。在文件作用范围,在 inclueing esp_log.h 前定义它,比如:
#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE #include "esp_log.h"
在部件范围,在部件的makefile里定义:
CFLAGS += -D LOG_LOCAL_LEVEL=ESP_LOG_DEBUG
在运行阶段,为了配置每个模块的日志输出,增加条用 esp_log_level_set() 函数:
esp_log_level_set("*", ESP_LOG_ERROR); // 设置所有的部件日志详细度为ERROR esp_log_level_set("wifi", ESP_LOG_WARN); // 使能来自WiFi栈的警告日志 esp_log_level_set("dhcpc", ESP_LOG_INFO); // 使能来自DHCP客户端的信息日志
日志库默认使用像vprintf这样的函数来写格式化输出到专用串口。通过调用简单的API,所有的日志输出可以被路由到JTAG来代替,使日志服务时间更快。详细内容请参考 Logging to Host 章节。
日志库被绝大部分esp-idf部件和例程使用。为了演示日志功能,检查 espressif/esp-idf 仓库examples 文件夹,其中包括以下例子:
. system/ota
. storage/sd_card
. protocols/https_request
标签:概述 doc 程序 char* warning printf inf tor 堆栈
原文地址:https://www.cnblogs.com/jiangmitiao/p/9749720.html