欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 明星 > ESP-IDF——LOG日志部分

ESP-IDF——LOG日志部分

2025/4/18 22:22:10 来源:https://blog.csdn.net/weixin_49941024/article/details/146364535  浏览:    关键词:ESP-IDF——LOG日志部分

目录

【ESP_LOG原理】

【menuconfig设置】

【代码示例】

【ESP_LOG相比printf的优势】


【ESP_LOG原理】

日志级别函数简要说明颜色
VerboseESP_LOGV(tag, format, ...)详细的调试信息,通常用于跟踪程序执行流程。默认
DebugESP_LOGD(tag, format, ...)调试信息,用于开发阶段的调试。白色
InfoESP_LOGI(tag, format, ...)一般信息,用于记录程序的运行状态。绿色
WarningESP_LOGW(tag, format, ...)警告信息,表示可能存在问题,但不会影响程序运行。黄色
ErrorESP_LOGE(tag, format, ...)错误信息,表示程序出现了需要处理的问题。红色

日志级别:从低到高为Verbose、Debug、Info、Warning、Error。低于设置级别的日志不输出。日志函数: 每个日志函数都需要一个 tag 参数,用于标识日志的来源。
日志颜色: 不同级别的日志在终端中会以不同的颜色显示,便于快速区分日志的重要性。

【menuconfig设置】

1. Default log verbosity
        KCONFIG Name: LOG_DEFAULT_LEVEL
        作用:
        设置默认的日志输出级别。 低于该级别的日志在编译时会被忽略
        例如,若设置为 Warning,则运行时不会输出 Debug 或更低级别的日志。
        注意事项: 如果需要运行时调整日志级别到比默认级别更高的级别,请参考下一项配置。

2. Maximum log verbosity
        KCONFIG Name: LOG_MAXIMUM_LEVEL
        作用: 设置运行时可以通过 esp_log_level_set 调整的最高日志级别(可高于默认日志级别)
        例如,默认日志级别为 Info,但最大日志级别可以设置为 Debug,这样在运行时可以动态调整到 Debug 级别。
        用途: 在关键点启用调试输出。 启动时减少日志输出,启动完成后再启用更多日志。
        注意事项: 增加最大日志级别会增加固件的大小。
        该配置仅适用于应用程序的日志,Bootloader 的日志级别在编译时固定。

3. Enable global master log level
        KCONFIG Name: LOG_MASTER_LEVEL
        作用: 启用全局主日志级别检查。 在主日志级别检查之后,才会进行日志标签的缓存查找。         主日志级别默认为 LOG_DEFAULT_LEVEL,可通过 esp_log_set_level_master 动态调整。
        用途: 当需要编译大量日志但希望在特定时间段禁用日志输出时,可以避免性能开销。
        例如,在时间关键或 CPU 密集的任务期间禁用日志,任务完成后再重新启用。
        注意事项: 启用该选项会增加程序的大小,具体取决于编译的日志数量。
        主日志级别检查优先于本地日志级别(ESP_LOG_LEVEL_LOCAL)。

4. Use ANSI terminal colors in log output
        KCONFIG Name: LOG_COLORS
        作用: 在日志输出中启用 ANSI 终端颜色代码。 不同日志级别会以不同颜色显示(如 Error 为红色,Warning 为黄色等)。
        注意事项: 终端程序必须支持 ANSI 颜色代码才能显示颜色。

5. Log Timestamps
        KCONFIG Name: LOG_TIMESTAMP_SOURCE
        作用: 设置日志输出中的时间戳来源。
        选项: Milliseconds since boot: 从启动开始的毫秒数,基于 RTOS 的 tick 计数和 tick 周期计算。 软件重启后会重置。 示例:(90000)。
                    System time: 从 POSIX 时间函数获取,使用芯片的 RTC 和高精度计时器维护。 系统时间在启动时初始化为 0,可通过 SNTP 同步或 POSIX 时间函数设置。 软件重启后不会重置
        示例:(00:01:30.000)。
        注意事项:目前该配置不适用于二进制库(如 Wi-Fi 和 Bluetooth 库)的日志输出,这些库的日志始终使用“从启动开始的毫秒数”。

【代码示例】

#include "esp_log.h"static const char *TAG = "MyModule";void app_main() {ESP_LOGE(TAG, "This is an error log.");    // 红色ESP_LOGW(TAG, "This is a warning log.");   // 黄色ESP_LOGI(TAG, "This is an info log.");     // 绿色ESP_LOGD(TAG, "This is a debug log.");     // 白色ESP_LOGV(TAG, "This is a verbose log.");   // 默认颜色
}

【ESP_LOG相比printf的优势】

特性ESP_LOGprintf
日志级别支持多级别日志(Verbose、Debug、Info、Warning、Error),便于过滤和分类日志。无日志级别,所有输出均为普通信息
颜色区分不同级别的日志可以显示不同的颜色(需启用 LOG_COLORS),便于快速识别。无颜色区分,所有输出均为单一颜色
标签支持每条日志可以附加标签(tag),便于区分不同模块或功能的日志。无标签支持,所有输出均为无标识的普通信息
性能优化针对嵌入式系统优化,减少资源占用。无专门优化,可能占用较多资源(如内存和 CPU)
运行时过滤支持通过 esp_log_level_set 动态调整日志级别,控制日志输出。无运行时过滤功能,所有输出均显示
编译时优化低级别日志(如 Debug 和 Verbose)可以在编译时被忽略,减少固件大小。所有输出均会被编译到固件中,无法在编译时优化
时间戳支持支持自动添加时间戳,便于跟踪日志的时间顺序。需手动添加时间戳,增加代码复杂性
跨平台兼容性专为 ESP32 系列芯片设计,与 ESP-IDF 框架深度集成。通用性强,但不针对特定平台优化
线程安全性在多线程环境中是安全的。需要手动实现线程安全机制
日志输出目标支持多种输出目标(如 UART、文件、网络等)。通常仅支持 UART 或标准输出

参考:

ESP32学习笔记——LOG日志库的使用_esp32 log-CSDN博客
ESP_LOG_esplog-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词