diff --git a/src/console.cpp b/src/console.cpp index 67b7ade63..8b036ad95 100644 --- a/src/console.cpp +++ b/src/console.cpp @@ -51,6 +51,12 @@ static inline EMSESP & to_app(Shell & shell) { static void console_log_level(Shell & shell, const std::vector & arguments) { if (!arguments.empty()) { + // special command called show which dumps out the contents of the web log buffer + if (arguments[0] == "show") { + EMSESP::webLogService.show(shell); + return; + } + uuid::log::Level level; if (uuid::log::parse_level_lowercase(arguments[0], level)) { diff --git a/src/locale_common.h b/src/locale_common.h index ea2977bc8..962fe7d2e 100644 --- a/src/locale_common.h +++ b/src/locale_common.h @@ -154,7 +154,7 @@ MAKE_WORD_CUSTOM(typeid_mandatory, "") MAKE_WORD_CUSTOM(deviceid_mandatory, "") MAKE_WORD_CUSTOM(device_type_optional, "[device]") MAKE_WORD_CUSTOM(invalid_log_level, "Invalid log level") -MAKE_WORD_CUSTOM(log_level_optional, "[level]") +MAKE_WORD_CUSTOM(log_level_optional, "[level | show]") MAKE_WORD_CUSTOM(name_mandatory, "") MAKE_WORD_CUSTOM(name_optional, "[name]") MAKE_WORD_CUSTOM(new_password_prompt1, "Enter new password: ") diff --git a/src/web/WebLogService.cpp b/src/web/WebLogService.cpp index 92aed297d..2584541b6 100644 --- a/src/web/WebLogService.cpp +++ b/src/web/WebLogService.cpp @@ -18,6 +18,8 @@ #include "emsesp.h" +using ::uuid::console::Shell; + namespace emsesp { WebLogService::WebLogService(AsyncWebServer * server, SecurityManager * securityManager) @@ -135,6 +137,43 @@ void WebLogService::operator<<(std::shared_ptr message) { }); } +// dumps out the contents of log buffer to shell console +void WebLogService::show(Shell & shell) { + if (log_messages_.empty()) + return; + + shell.println(); + shell.println("Last Log:"); + shell.println(); + + for (const auto & message : log_messages_) { + log_message_id_tail_ = message.id_; + // Serial.printf("%s", message.content_->text.c_str()); + // Serial.println(); + + shell.print(uuid::log::format_timestamp_ms(message.content_->uptime_ms, 3)); + shell.printf(" %c %lu: [%s] ", uuid::log::format_level_char(message.content_->level), message.id_, message.content_->name); + + if ((message.content_->level == uuid::log::Level::ERR) || (message.content_->level == uuid::log::Level::WARNING)) { + shell.print(COLOR_RED); + shell.println(message.content_->text); + shell.print(COLOR_RESET); + } else if (message.content_->level == uuid::log::Level::INFO) { + shell.print(COLOR_YELLOW); + shell.println(message.content_->text); + shell.print(COLOR_RESET); + } else if (message.content_->level == uuid::log::Level::DEBUG) { + shell.print(COLOR_CYAN); + shell.println(message.content_->text); + shell.print(COLOR_RESET); + } else { + shell.println(message.content_->text); + } + } + + shell.println(); +} + void WebLogService::loop() { if (!events_.count() || log_messages_.empty()) { return; diff --git a/src/web/WebLogService.h b/src/web/WebLogService.h index 900c1ef59..222b159d0 100644 --- a/src/web/WebLogService.h +++ b/src/web/WebLogService.h @@ -23,6 +23,8 @@ #define EMSESP_FETCH_LOG_PATH "/rest/fetchLog" #define EMSESP_LOG_SETTINGS_PATH "/rest/logSettings" +using ::uuid::console::Shell; + namespace emsesp { class WebLogService : public uuid::log::Handler { @@ -42,6 +44,7 @@ class WebLogService : public uuid::log::Handler { bool compact() const; void compact(bool compact); void loop(); + void show(Shell & shell); virtual void operator<<(std::shared_ptr message);