diff --git a/esphome/components/logger/logger.cpp b/esphome/components/logger/logger.cpp index 5ef0a68a38..2eb2136ca8 100644 --- a/esphome/components/logger/logger.cpp +++ b/esphome/components/logger/logger.cpp @@ -137,16 +137,14 @@ void Logger::log_vprintf_(uint8_t level, const char *tag, int line, const __Flas this->format_log_to_buffer_with_terminator_(level, tag, line, this->tx_buffer_, args, this->tx_buffer_, &this->tx_buffer_at_, this->tx_buffer_size_); - size_t msg_length = + uint16_t msg_length = this->tx_buffer_at_ - msg_start; // Don't subtract 1 - tx_buffer_at_ is already at the null terminator position // Callbacks get message first (before console write) this->log_callback_.call(level, tag, this->tx_buffer_ + msg_start, msg_length); // Write to console starting at the msg_start - if (this->baud_rate_ > 0) { - this->write_msg_(this->tx_buffer_ + msg_start, msg_length); - } + this->write_tx_buffer_to_console_(msg_start, &msg_length); global_recursion_guard_ = false; } diff --git a/esphome/components/logger/logger.h b/esphome/components/logger/logger.h index a6a6900f70..e4a6383cc9 100644 --- a/esphome/components/logger/logger.h +++ b/esphome/components/logger/logger.h @@ -231,10 +231,13 @@ class Logger : public Component { } // Helper to write tx_buffer_ to console if logging is enabled - inline void HOT write_tx_buffer_to_console_() { + // offset: starting position in tx_buffer_ (default 0) + // length: pointer to length of message at offset (updated with newline if added) + inline void HOT write_tx_buffer_to_console_(uint32_t offset = 0, uint16_t *length = nullptr) { if (this->baud_rate_ > 0) { - this->add_newline_to_buffer_if_needed_(this->tx_buffer_, &this->tx_buffer_at_, this->tx_buffer_size_); - this->write_msg_(this->tx_buffer_, this->tx_buffer_at_); + uint16_t *len_ptr = length ? length : &this->tx_buffer_at_; + this->add_newline_to_buffer_if_needed_(this->tx_buffer_ + offset, len_ptr, this->tx_buffer_size_ - offset); + this->write_msg_(this->tx_buffer_ + offset, *len_ptr); } }