From 6f398efaacd4cf733fcaedf29b648d17899071f0 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 21 Feb 2022 20:47:44 +0800 Subject: ... --- src/common/CMakeLists.txt | 3 ++- src/common/log/Logger.cpp | 8 ++++++++ src/common/log/StdioLogTarget.cpp | 5 +++++ src/common/platform/win/DebugLogTarget.cpp | 10 ++++++++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/common/platform/win/DebugLogTarget.cpp (limited to 'src/common') diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index 330c7226..ae418f6b 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -37,8 +37,9 @@ if (WIN32) target_sources(cru_base PRIVATE platform/win/BridgeComStream.cpp platform/win/ComAutoInit.cpp - platform/win/StreamConvert.cpp + platform/win/DebugLogTarget.cpp platform/win/Exception.cpp + platform/win/StreamConvert.cpp platform/win/Win32FileStream.cpp ) diff --git a/src/common/log/Logger.cpp b/src/common/log/Logger.cpp index bcafde21..e13cb122 100644 --- a/src/common/log/Logger.cpp +++ b/src/common/log/Logger.cpp @@ -5,12 +5,20 @@ #include #include +#ifdef CRU_PLATFORM_WINDOWS +#include "cru/common/platform/win/DebugLogTarget.h" +#endif + namespace cru::log { Logger *Logger::GetInstance() { static Logger logger; logger.AddLogTarget(std::make_unique()); +#ifdef CRU_PLATFORM_WINDOWS + logger.AddLogTarget(std::make_unique()); +#endif + return &logger; } diff --git a/src/common/log/StdioLogTarget.cpp b/src/common/log/StdioLogTarget.cpp index ad29a3ce..7f99dbd1 100644 --- a/src/common/log/StdioLogTarget.cpp +++ b/src/common/log/StdioLogTarget.cpp @@ -9,6 +9,11 @@ StdioLogTarget::~StdioLogTarget() {} void StdioLogTarget::Write(log::LogLevel level, StringView s) { #ifdef CRU_PLATFORM_WINDOWS + if (level == log::LogLevel::Error) { + std::wcerr.write(reinterpret_cast(s.data()), s.size()); + } else { + std::wcout.write(reinterpret_cast(s.data()), s.size()); + } #else std::string m = s.ToUtf8(); diff --git a/src/common/platform/win/DebugLogTarget.cpp b/src/common/platform/win/DebugLogTarget.cpp new file mode 100644 index 00000000..92d26449 --- /dev/null +++ b/src/common/platform/win/DebugLogTarget.cpp @@ -0,0 +1,10 @@ +#include "cru/common/platform/win/DebugLogTarget.h" + +namespace cru::platform::win { +void WinDebugLogTarget::Write(::cru::log::LogLevel level, StringView s) { + CRU_UNUSED(level) + + String m = s.ToString(); + ::OutputDebugStringW(reinterpret_cast(m.c_str())); +} +} // namespace cru::platform::win -- cgit v1.2.3