2024-03-11 09:44:33 -04:00
|
|
|
/*
|
|
|
|
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
|
|
|
|
*
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
*/
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
2024-02-28 13:33:12 -05:00
|
|
|
#include <stdint.h>
|
2024-03-11 09:44:33 -04:00
|
|
|
#include "sdkconfig.h"
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Log level
|
|
|
|
*/
|
|
|
|
typedef enum {
|
|
|
|
ESP_LOG_NONE = 0, /*!< No log output */
|
|
|
|
ESP_LOG_ERROR = 1, /*!< Critical errors, software module can not recover on its own */
|
|
|
|
ESP_LOG_WARN = 2, /*!< Error conditions from which recovery measures have been taken */
|
|
|
|
ESP_LOG_INFO = 3, /*!< Information messages which describe normal flow of events */
|
|
|
|
ESP_LOG_DEBUG = 4, /*!< Extra information which is not necessary for normal use (values, pointers, sizes, etc). */
|
|
|
|
ESP_LOG_VERBOSE = 5, /*!< Bigger chunks of debugging information, or frequent messages which can potentially flood the output. */
|
|
|
|
ESP_LOG_MAX = 6, /*!< Number of levels supported */
|
|
|
|
} esp_log_level_t;
|
|
|
|
|
|
|
|
/** @cond */
|
|
|
|
|
2024-02-28 13:33:12 -05:00
|
|
|
// LOG_LOCAL_LEVEL controls what log levels are included in the binary.
|
2024-03-11 09:44:33 -04:00
|
|
|
#ifndef LOG_LOCAL_LEVEL
|
2024-02-28 13:33:12 -05:00
|
|
|
#if BOOTLOADER_BUILD
|
|
|
|
#define LOG_LOCAL_LEVEL CONFIG_BOOTLOADER_LOG_LEVEL
|
|
|
|
#else // !BOOTLOADER_BUILD
|
2024-03-11 09:44:33 -04:00
|
|
|
#define LOG_LOCAL_LEVEL CONFIG_LOG_MAXIMUM_LEVEL
|
2024-02-28 13:33:12 -05:00
|
|
|
#endif // !BOOTLOADER_BUILD
|
|
|
|
#endif // LOG_LOCAL_LEVEL
|
|
|
|
|
|
|
|
#if BOOTLOADER_BUILD
|
|
|
|
|
|
|
|
#define _ESP_LOG_ENABLED(log_level) (LOG_LOCAL_LEVEL >= (log_level))
|
|
|
|
#define _ESP_LOG_EARLY_ENABLED(log_level) _ESP_LOG_ENABLED(log_level)
|
|
|
|
|
|
|
|
#else // !BOOTLOADER_BUILD
|
|
|
|
|
|
|
|
#if CONFIG_LOG_MASTER_LEVEL
|
|
|
|
#define _ESP_LOG_ENABLED(log_level) (esp_log_get_level_master() >= (log_level) && LOG_LOCAL_LEVEL >= (log_level))
|
|
|
|
#else // !CONFIG_LOG_MASTER_LEVEL
|
|
|
|
#define _ESP_LOG_ENABLED(log_level) (LOG_LOCAL_LEVEL >= (log_level))
|
|
|
|
#endif // !CONFIG_LOG_MASTER_LEVEL
|
|
|
|
|
|
|
|
/* For early log, there is no log tag filtering. So we want to log only if both the LOG_LOCAL_LEVEL and the
|
|
|
|
currently configured min log level are higher than the log level */
|
|
|
|
#define _ESP_LOG_EARLY_ENABLED(log_level) (LOG_LOCAL_LEVEL >= (log_level) && esp_log_get_default_level() >= (log_level))
|
|
|
|
|
|
|
|
#endif // !BOOTLOADER_BUILD
|
|
|
|
|
|
|
|
/** @endcond */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Get the default log level.
|
|
|
|
*
|
|
|
|
* This function returns the default log level.
|
|
|
|
* The default log level is used by the definition of ESP_LOGx macros and
|
|
|
|
* can be overridden for specific tags using `esp_log_level_set("*", level)`.
|
|
|
|
* If CONFIG_LOG_DYNAMIC_LEVEL_CONTROL=n, changing the default log level is not possible.
|
|
|
|
*
|
|
|
|
* @return The default log level.
|
|
|
|
*/
|
|
|
|
__attribute__((always_inline))
|
|
|
|
static inline esp_log_level_t esp_log_get_default_level(void)
|
|
|
|
{
|
|
|
|
#if CONFIG_LOG_DYNAMIC_LEVEL_CONTROL
|
|
|
|
extern esp_log_level_t esp_log_default_level;
|
|
|
|
return esp_log_default_level;
|
2024-03-11 09:44:33 -04:00
|
|
|
#else
|
2024-02-28 13:33:12 -05:00
|
|
|
return (esp_log_level_t) CONFIG_LOG_DEFAULT_LEVEL;
|
2024-03-11 09:44:33 -04:00
|
|
|
#endif
|
2024-02-28 13:33:12 -05:00
|
|
|
}
|
2024-03-11 09:44:33 -04:00
|
|
|
|
2024-02-28 13:33:12 -05:00
|
|
|
#if defined(CONFIG_LOG_MASTER_LEVEL) || __DOXYGEN__
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Master log level.
|
|
|
|
*
|
|
|
|
* Optional master log level to check against for ESP_LOGx macros before calling
|
|
|
|
* esp_log_write. Allows one to set a higher CONFIG_LOG_MAXIMUM_LEVEL but not
|
|
|
|
* impose a performance hit during normal operation (only when instructed). An
|
|
|
|
* application may set esp_log_set_level_master(level) to globally enforce a
|
|
|
|
* maximum log level. ESP_LOGx macros above this level will be skipped immediately,
|
|
|
|
* rather than calling esp_log or esp_log_write and doing a cache hit.
|
|
|
|
*
|
|
|
|
* @note The tradeoff is increased application size.
|
|
|
|
*
|
|
|
|
* @param level Master log level
|
|
|
|
*/
|
|
|
|
void esp_log_set_level_master(esp_log_level_t level);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Returns master log level.
|
|
|
|
* @return Master log level
|
|
|
|
*/
|
|
|
|
esp_log_level_t esp_log_get_level_master(void);
|
|
|
|
|
|
|
|
#endif // CONFIG_LOG_MASTER_LEVEL
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Set log level for given tag
|
|
|
|
*
|
|
|
|
* If logging for given component has already been enabled, changes previous setting.
|
|
|
|
*
|
|
|
|
* @note Note that this function can not raise log level above the level set using
|
|
|
|
* CONFIG_LOG_MAXIMUM_LEVEL setting in menuconfig.
|
|
|
|
*
|
|
|
|
* To raise log level above the default one for a given file, define
|
|
|
|
* LOG_LOCAL_LEVEL to one of the ESP_LOG_* values, before including esp_log.h in this file.
|
|
|
|
*
|
|
|
|
* If CONFIG_LOG_DYNAMIC_LEVEL_CONTROL is not selected the static (no-op) implementation of log level is used.
|
|
|
|
* Changing the log level is not possible, esp_log_level_set does not work.
|
|
|
|
*
|
|
|
|
* @param tag Tag of the log entries to enable. Must be a non-NULL zero terminated string.
|
|
|
|
* Value "*" resets log level for all tags to the given value.
|
|
|
|
* If the tag is NULL then a silent return happens.
|
|
|
|
* @param level Selects log level to enable.
|
|
|
|
* Only logs at this and lower verbosity levels will be shown.
|
|
|
|
*/
|
|
|
|
void esp_log_level_set(const char* tag, esp_log_level_t level);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief Get log level for a given tag, can be used to avoid expensive log statements
|
|
|
|
*
|
|
|
|
* If CONFIG_LOG_DYNAMIC_LEVEL_CONTROL is not selected the static (no-op) implementation of log level is used.
|
|
|
|
* Changing the log level is not possible, esp_log_level_set does not work. This function returns the default log level.
|
|
|
|
*
|
|
|
|
* @param tag Tag of the log to query current level. Must be a zero terminated string.
|
|
|
|
* If tag is NULL then the default log level is returned (see esp_log_get_default_level()).
|
|
|
|
* @return The current log level for the given tag.
|
|
|
|
*/
|
|
|
|
esp_log_level_t esp_log_level_get(const char* tag);
|
2024-03-11 09:44:33 -04:00
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|