diff --git a/src/kiwano/core/Logger.cpp b/src/kiwano/core/Logger.cpp index 447fe8a7..82e3522d 100644 --- a/src/kiwano/core/Logger.cpp +++ b/src/kiwano/core/Logger.cpp @@ -178,7 +178,7 @@ Logger::Logger() , output_stream_(std::cout.rdbuf()) , error_stream_(std::cerr.rdbuf()) { - ResetOutputStream(); + ResetStreamToStdStream(); } Logger::~Logger() @@ -277,7 +277,7 @@ void Logger::Output(Level level, StringStream& sstream) } } -void Logger::ResetOutputStream() +void Logger::ResetStreamToStdStream() { bool has_console = ::GetConsoleWindow() != nullptr; if (has_console) @@ -302,17 +302,17 @@ void Logger::ResetOutputStream() (void)std::cout.imbue(std::locale()); (void)std::cerr.imbue(std::locale()); - RedirectOutputStreamBuffer(std::cout.rdbuf()); - RedirectErrorStreamBuffer(std::cerr.rdbuf()); + RedirectOutputStream(std::cout.rdbuf()); + RedirectErrorStream(std::cerr.rdbuf()); } } -std::streambuf* Logger::RedirectOutputStreamBuffer(std::streambuf* buf) +std::streambuf* Logger::RedirectOutputStream(std::streambuf* buf) { return output_stream_.rdbuf(buf); } -std::streambuf* Logger::RedirectErrorStreamBuffer(std::streambuf* buf) +std::streambuf* Logger::RedirectErrorStream(std::streambuf* buf) { return error_stream_.rdbuf(buf); } @@ -335,6 +335,8 @@ void Logger::ShowConsole(bool show) } else { + ResetStreamToStdStream(); + // disable the close button of console HMENU hmenu = ::GetSystemMenu(console, FALSE); ::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND); @@ -355,8 +357,6 @@ void Logger::ShowConsole(bool show) } } } - - ResetOutputStream(); } } // namespace kiwano diff --git a/src/kiwano/core/Logger.h b/src/kiwano/core/Logger.h index 55bbe973..8f24fe34 100644 --- a/src/kiwano/core/Logger.h +++ b/src/kiwano/core/Logger.h @@ -90,11 +90,6 @@ public: template void Println(Level level, _Args&&... args); - /// \~chinese - /// @brief 显示或关闭控制台 - /// @note 此操作会重置输出流 - void ShowConsole(bool show); - /// \~chinese /// @brief 启用日志 void Enable(); @@ -108,20 +103,21 @@ public: OutputStream& GetOutputStream(); /// \~chinese - /// @brief 获取错误流 + /// @brief 获取错误输出流 OutputStream& GetErrorStream(); /// \~chinese /// @brief 重定向输出流 - std::streambuf* RedirectOutputStreamBuffer(std::streambuf* buf); + std::streambuf* RedirectOutputStream(std::streambuf* buf); /// \~chinese - /// @brief 重定向错误流 - std::streambuf* RedirectErrorStreamBuffer(std::streambuf* buf); + /// @brief 重定向错误输出流 + std::streambuf* RedirectErrorStream(std::streambuf* buf); /// \~chinese - /// @brief 重置输出流 - void ResetOutputStream(); + /// @brief 显示或关闭控制台 + /// @note 此操作会重定向输出流到标准输出流 + void ShowConsole(bool show); private: Logger(); @@ -132,6 +128,8 @@ private: void Output(Level level, StringStream& sstream); + void ResetStreamToStdStream(); + void ResetConsoleColor() const; OutputStream& DefaultOutputColor(OutputStream& out);