3#ifdef USE_ESPHOME_TASK_LOG_BUFFER
13static const char *
const TAG =
"logger";
30 TaskHandle_t current_task = xTaskGetCurrentTaskHandle();
31 bool is_main_task = (current_task ==
main_task_);
45 bool message_sent =
false;
46#ifdef USE_ESPHOME_TASK_LOG_BUFFER
49 this->
log_buffer_->send_message_thread_safe(level, tag,
static_cast<uint16_t
>(line), current_task, format, args);
63 static const size_t MAX_CONSOLE_LOG_MSG_SIZE = 144;
64 char console_buffer[MAX_CONSOLE_LOG_MSG_SIZE];
65 uint16_t buffer_at = 0;
67 MAX_CONSOLE_LOG_MSG_SIZE);
76void HOT
Logger::log_vprintf_(uint8_t level,
const char *tag,
int line,
const char *format, va_list args) {
89#ifdef USE_STORE_LOG_STR_IN_FLASH
120 auto *format_pgm_p =
reinterpret_cast<const uint8_t *
>(format);
157Logger::Logger(uint32_t baud_rate,
size_t tx_buffer_size) : baud_rate_(baud_rate), tx_buffer_size_(tx_buffer_size) {
160#if defined(USE_ESP32) || defined(USE_LIBRETINY)
161 this->
main_task_ = xTaskGetCurrentTaskHandle();
162#elif defined(USE_ZEPHYR)
166#ifdef USE_ESPHOME_TASK_LOG_BUFFER
168 this->
log_buffer_ = esphome::make_unique<logger::TaskLogBuffer>(total_buffer_size);
177#if defined(USE_LOGGER_USB_CDC) || defined(USE_ESP32)
179#if defined(USE_LOGGER_USB_CDC) && defined(USE_ARDUINO)
181 static bool opened =
false;
182 if (opened == Serial) {
185 if (
false == opened) {
197#ifdef USE_ESPHOME_TASK_LOG_BUFFER
202 void *received_token;
205 while (this->
log_buffer_->borrow_message_main_loop(&message, &text, &received_token)) {
211 &this->tx_buffer_at_, this->tx_buffer_size_);
213 this->tx_buffer_size_);
220 this->
log_buffer_->release_message_main_loop(received_token);
241#if defined(USE_ESP32) || defined(USE_ESP8266) || defined(USE_RP2040) || defined(USE_LIBRETINY) || defined(USE_ZEPHYR)
249static const char *
const LOG_LEVELS[] = {
"NONE",
"ERROR",
"WARN",
"INFO",
"CONFIG",
"DEBUG",
"VERBOSE",
"VERY_VERBOSE"};
255 " Initial Level: %s",
259 " Log Baud Rate: %" PRIu32
"\n"
260 " Hardware UART: %s",
263#ifdef USE_ESPHOME_TASK_LOG_BUFFER
265 ESP_LOGCONFIG(TAG,
" Task Log Buffer Size: %u", this->
log_buffer_->size());
270 ESP_LOGCONFIG(TAG,
" Level for '%s': %s", it.first.c_str(), LOG_LEVELS[it.second]);
275 if (level > ESPHOME_LOG_LEVEL) {
276 level = ESPHOME_LOG_LEVEL;
277 ESP_LOGW(TAG,
"Cannot set log level higher than pre-compiled %s", LOG_LEVELS[ESPHOME_LOG_LEVEL]);
void schedule_dump_config()
void enable_loop_soon_any_context()
Thread and ISR-safe version of enable_loop() that can be called from any context.
Logger component for all ESPHome logging.
CallbackManager< void(uint8_t, const char *, const char *, size_t)> log_callback_
void HOT format_log_to_buffer_with_terminator_(uint8_t level, const char *tag, int line, const char *format, va_list args, char *buffer, uint16_t *buffer_at, uint16_t buffer_size)
void HOT log_message_to_buffer_and_send_(uint8_t level, const char *tag, int line, const char *format, va_list args)
void dump_config() override
const char * get_uart_selection_()
uint8_t level_for(const char *tag)
bool HOT check_and_set_task_log_recursion_(bool is_main_task)
void log_vprintf_(uint8_t level, const char *tag, int line, const char *format, va_list args)
CallbackManager< void(uint8_t)> level_callback_
void add_on_log_callback(std::function< void(uint8_t, const char *, const char *, size_t)> &&callback)
Register a callback that will be called for every log message sent.
void HOT write_footer_to_buffer_(char *buffer, uint16_t *buffer_at, uint16_t buffer_size)
float get_setup_priority() const override
UARTSelection get_uart() const
Get the UART used by the logger.
std::map< std::string, uint8_t > log_levels_
void disable_loop_when_buffer_empty_()
std::unique_ptr< logger::TaskLogBuffer > log_buffer_
void init_log_buffer(size_t total_buffer_size)
void set_log_level(uint8_t level)
Set the default log level for this logger.
void set_baud_rate(uint32_t baud_rate)
Manually set the baud rate for serial, set to 0 to disable.
bool global_recursion_guard_
Logger(uint32_t baud_rate, size_t tx_buffer_size)
void HOT reset_task_log_recursion_(bool is_main_task)
void write_msg_(const char *msg)
void write_body_to_buffer_(const char *value, size_t length, char *buffer, uint16_t *buffer_at, uint16_t buffer_size)
void HOT write_header_to_buffer_(uint8_t level, const char *tag, int line, const char *thread_name, char *buffer, uint16_t *buffer_at, uint16_t buffer_size)
UARTSelection
Enum for logging UART selection.
const float BUS
For communication buses like i2c/spi.
Application App
Global storage of Application pointer - only one Application can exist.
uint8_t progmem_read_byte(const uint8_t *addr)