diff options
Diffstat (limited to 'libs/uibase/src/log.cpp')
| -rw-r--r-- | libs/uibase/src/log.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libs/uibase/src/log.cpp b/libs/uibase/src/log.cpp index a44c9e3..b7c6a9a 100644 --- a/libs/uibase/src/log.cpp +++ b/libs/uibase/src/log.cpp @@ -109,11 +109,15 @@ protected: spdlog::memory_buf_t formatted; base_sink::formatter_->format(m, formatted); - if (formatted.size() >= 2) { - // remove \r\n - e.formattedMessage.assign(formatted.begin(), formatted.end() - 2); - } else { - e.formattedMessage = std::string(formatted); + // Strip trailing newline(s). spdlog appends \r\n on Windows but only + // \n on Linux; unconditionally removing 2 chars truncates the real message. + { + auto end = formatted.end(); + while (end != formatted.begin() && + (*(end - 1) == '\n' || *(end - 1) == '\r')) { + --end; + } + e.formattedMessage.assign(formatted.begin(), end); } (*m_f)(std::move(e)); |
