4 #include <driver/uart.h> 5 #include "freertos/FreeRTOS.h" 8 #if defined(USE_ESP32_FRAMEWORK_ARDUINO) || defined(USE_ESP_IDF) 10 #endif // USE_ESP32_FRAMEWORK_ARDUINO || USE_ESP_IDF 17 static const char *
const TAG =
"logger";
19 static const char *
const LOG_LEVEL_COLORS[] = {
21 ESPHOME_LOG_BOLD(ESPHOME_LOG_COLOR_RED),
22 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_YELLOW),
23 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_GREEN),
24 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_MAGENTA),
25 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_CYAN),
26 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_GRAY),
27 ESPHOME_LOG_COLOR(ESPHOME_LOG_COLOR_WHITE),
29 static const char *
const LOG_LEVEL_LETTERS[] = {
46 const char *color = LOG_LEVEL_COLORS[level];
47 const char *letter = LOG_LEVEL_LETTERS[level];
63 #ifdef USE_STORE_LOG_STR_IN_FLASH 72 auto *format_pgm_p =
reinterpret_cast<const uint8_t *
>(format);
103 return ESPHOME_LOG_LEVEL;
117 #endif // USE_ARDUINO 120 #
if defined(USE_ESP32_VARIANT_ESP32S2)
122 #elif defined(USE_ESP32_VARIANT_ESP32C3)
124 #elif defined(USE_ESP32_VARIANT_ESP32S3)
132 uart_write_bytes(
uart_num_, msg, strlen(msg));
144 if (xPortGetFreeHeapSize() < 2048)
159 switch (this->
uart_) {
175 Serial.setDebugOutput(ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE);
187 Serial1.setDebugOutput(ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE);
190 #if defined(USE_ESP32) && !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32S2) && \ 191 !defined(USE_ESP32_VARIANT_ESP32S3) 204 #endif // USE_ARDUINO 214 #if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32S2) && !defined(USE_ESP32_VARIANT_ESP32S3) 218 #endif // !USE_ESP32_VARIANT_ESP32C3 && !USE_ESP32_VARIANT_ESP32S2 && !USE_ESP32_VARIANT_ESP32S3 219 #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) 223 #endif // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3 224 #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) 228 #endif // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32S3 231 uart_config_t uart_config{};
233 uart_config.data_bits = UART_DATA_8_BITS;
234 uart_config.parity = UART_PARITY_DISABLE;
235 uart_config.stop_bits = UART_STOP_BITS_1;
236 uart_config.flow_ctrl = UART_HW_FLOWCTRL_DISABLE;
237 uart_param_config(
uart_num_, &uart_config);
240 uart_driver_install(
uart_num_, uart_buffer_size, uart_buffer_size, 10,
nullptr, 0);
242 #endif // USE_ESP_IDF 246 uart_set_debug(UART_NO);
248 #endif // USE_ESP8266 251 #if defined(USE_ESP_IDF) || defined(USE_ESP32_FRAMEWORK_ARDUINO) 253 if (ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE) {
254 esp_log_level_set(
"*", ESP_LOG_VERBOSE);
256 #endif // USE_ESP_IDF || USE_ESP32_FRAMEWORK_ARDUINO 258 ESP_LOGI(TAG,
"Log initialized");
269 const char *
const LOG_LEVELS[] = {
"NONE",
"ERROR",
"WARN",
"INFO",
"CONFIG",
"DEBUG",
"VERBOSE",
"VERY_VERBOSE"};
273 #if !defined(USE_ESP32_VARIANT_ESP32C3) && !defined(USE_ESP32_VARIANT_ESP32S2) && !defined(USE_ESP32_VARIANT_ESP32S3) 275 #endif // !USE_ESP32_VARIANT_ESP32C3 && !USE_ESP32_VARIANT_ESP32S2 && !USE_ESP32_VARIANT_ESP32S3 276 #if defined(USE_ESP_IDF) 277 #if defined(USE_ESP32_VARIANT_ESP32S2) || defined(USE_ESP32_VARIANT_ESP32S3) 279 #endif // USE_ESP32_VARIANT_ESP32S2 || USE_ESP32_VARIANT_ESP32S3 280 #if defined(USE_ESP32_VARIANT_ESP32C3) || defined(USE_ESP32_VARIANT_ESP32S3) 282 #endif // USE_ESP32_VARIANT_ESP32C3 || USE_ESP32_VARIANT_ESP32S3 283 #endif // USE_ESP_IDF 287 const char *
const UART_SELECTIONS[] = {
"UART0",
"UART1",
"UART0_SWAP"};
290 const char *
const UART_SELECTIONS[] = {
"UART0",
"UART1",
"USB_CDC"};
291 #endif // USE_ESP8266 293 ESP_LOGCONFIG(TAG,
"Logger:");
294 ESP_LOGCONFIG(TAG,
" Level: %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);
295 ESP_LOGCONFIG(TAG,
" Log Baud Rate: %u", this->
baud_rate_);
296 ESP_LOGCONFIG(TAG,
" Hardware UART: %s", UART_SELECTIONS[this->
uart_]);
298 ESP_LOGCONFIG(TAG,
" Level for '%s': %s", it.tag.c_str(), LOG_LEVELS[it.level]);
void set_baud_rate(uint32_t baud_rate)
Manually set the baud rate for serial, set to 0 to disable.
void add_on_log_callback(std::function< void(int, const char *, const char *)> &&callback)
Register a callback that will be called for every log message sent.
UARTSelection
Enum for logging UART selection.
int level_for(const char *tag)
void log_vprintf_(int level, const char *tag, int line, const char *format, va_list args)
void vprintf_to_buffer_(const char *format, va_list args)
void dump_config() override
float get_setup_priority() const override
Logger(uint32_t baud_rate, size_t tx_buffer_size)
void write_header_(int level, const char *tag, int line)
const float BUS
For communication buses like i2c/spi.
UARTSelection get_uart() const
Get the UART used by the logger.
void set_null_terminator_()
void printf_to_buffer_(const char *format,...)
void write_to_buffer_(char value)
const char *const LOG_LEVELS[]
void pre_setup()
Set up this component.
uint8_t progmem_read_byte(const uint8_t *addr)
const char *const UART_SELECTIONS[]
void log_message_(int level, const char *tag, int offset=0)
std::vector< LogLevelOverride > log_levels_
void set_log_level(const std::string &tag, int log_level)
Set the log level of the specified tag.
bool recursion_guard_
Prevents recursive log calls, if true a log message is already being processed.
CallbackManager< void(int, const char *, const char *)> log_callback_
int HOT esp_idf_log_vprintf_(const char *format, va_list args)
bool is_buffer_full_() const