3#ifdef USE_ESPHOME_TASK_LOG_BUFFER
14static const char *
const TAG =
"logger";
31 TaskHandle_t current_task = xTaskGetCurrentTaskHandle();
32 bool is_main_task = (current_task ==
main_task_);
46 bool message_sent =
false;
47#ifdef USE_ESPHOME_TASK_LOG_BUFFER
49 message_sent = this->
log_buffer_->send_message_thread_safe(
static_cast<uint8_t
>(level), tag,
50 static_cast<uint16_t
>(line), current_task, format, args);
59 static const size_t MAX_CONSOLE_LOG_MSG_SIZE = 144;
60 char console_buffer[MAX_CONSOLE_LOG_MSG_SIZE];
63 MAX_CONSOLE_LOG_MSG_SIZE);
72void HOT
Logger::log_vprintf_(
int level,
const char *tag,
int line,
const char *format, va_list args) {
85#ifdef USE_STORE_LOG_STR_IN_FLASH
97 auto *format_pgm_p =
reinterpret_cast<const uint8_t *
>(format);
139 if (xPortGetFreeHeapSize() < 2048)
145Logger::Logger(uint32_t baud_rate,
size_t tx_buffer_size) : baud_rate_(baud_rate), tx_buffer_size_(tx_buffer_size) {
148#if defined(USE_ESP32) || defined(USE_LIBRETINY)
149 this->
main_task_ = xTaskGetCurrentTaskHandle();
152#ifdef USE_ESPHOME_TASK_LOG_BUFFER
158#if defined(USE_LOGGER_USB_CDC) || defined(USE_ESP32)
160#if defined(USE_LOGGER_USB_CDC) && defined(USE_ARDUINO)
162 static bool opened =
false;
163 if (opened == Serial) {
166 if (
false == opened) {
173#ifdef USE_ESPHOME_TASK_LOG_BUFFER
178 void *received_token;
181 while (this->
log_buffer_->borrow_message_main_loop(&message, &text, &received_token)) {
187 &this->tx_buffer_at_, this->tx_buffer_size_);
189 this->tx_buffer_size_);
195 this->
log_buffer_->release_message_main_loop(received_token);
213#if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) || defined(USE_LIBRETINY)
221static const char *
const LOG_LEVELS[] = {
"NONE",
"ERROR",
"WARN",
"INFO",
"CONFIG",
"DEBUG",
"VERBOSE",
"VERY_VERBOSE"};
224 ESP_LOGCONFIG(TAG,
"Logger:");
225 ESP_LOGCONFIG(TAG,
" Max Level: %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);
226 ESP_LOGCONFIG(TAG,
" Initial Level: %s", LOG_LEVELS[this->
current_level_]);
228 ESP_LOGCONFIG(TAG,
" Log Baud Rate: %" PRIu32, this->
baud_rate_);
231#ifdef USE_ESPHOME_TASK_LOG_BUFFER
233 ESP_LOGCONFIG(TAG,
" Task Log Buffer Size: %u", this->
log_buffer_->size());
238 ESP_LOGCONFIG(TAG,
" Level for '%s': %s", it.first.c_str(), LOG_LEVELS[it.second]);
243 if (level > ESPHOME_LOG_LEVEL) {
244 level = ESPHOME_LOG_LEVEL;
245 ESP_LOGW(TAG,
"Cannot set log level higher than pre-compiled %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);
void schedule_dump_config()
Logger component for all ESPHome logging.
void call_log_callbacks_(int level, const char *tag, const char *msg)
int level_for(const char *tag)
void HOT write_footer_to_buffer_(char *buffer, int *buffer_at, int buffer_size)
void dump_config() override
const char * get_uart_selection_()
void log_vprintf_(int level, const char *tag, int line, const char *format, va_list args)
bool HOT check_and_set_task_log_recursion_(bool is_main_task)
CallbackManager< void(int, const char *, const char *)> log_callback_
void HOT log_message_to_buffer_and_send_(int level, const char *tag, int line, const char *format, va_list args)
float get_setup_priority() const override
UARTSelection get_uart() const
Get the UART used by the logger.
std::unique_ptr< logger::TaskLogBuffer > log_buffer_
void init_log_buffer(size_t total_buffer_size)
void HOT write_header_to_buffer_(int level, const char *tag, int line, const char *thread_name, char *buffer, int *buffer_at, int buffer_size)
void set_baud_rate(uint32_t baud_rate)
Manually set the baud rate for serial, set to 0 to disable.
void HOT format_log_to_buffer_with_terminator_(int level, const char *tag, int line, const char *format, va_list args, char *buffer, int *buffer_at, int buffer_size)
bool global_recursion_guard_
Logger(uint32_t baud_rate, size_t tx_buffer_size)
std::map< std::string, int > log_levels_
void write_body_to_buffer_(const char *value, size_t length, char *buffer, int *buffer_at, int buffer_size)
void HOT reset_task_log_recursion_(bool is_main_task)
void write_msg_(const char *msg)
CallbackManager< void(int)> level_callback_
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.
void set_log_level(int level)
Set the default log level for this logger.
UARTSelection
Enum for logging UART selection.
const float BUS
For communication buses like i2c/spi.
Providing packet encoding functions for exchanging data with a remote host.
std::unique_ptr< T > make_unique(Args &&...args)
Application App
Global storage of Application pointer - only one Application can exist.
uint8_t progmem_read_byte(const uint8_t *addr)