diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/logging/backend.cpp | 11 | ||||
| -rw-r--r-- | src/common/logging/backend.h | 14 | 
2 files changed, 23 insertions, 2 deletions
| diff --git a/src/common/logging/backend.cpp b/src/common/logging/backend.cpp index 6d5218465..5753b871a 100644 --- a/src/common/logging/backend.cpp +++ b/src/common/logging/backend.cpp @@ -12,7 +12,8 @@  #include <thread>  #include <vector>  #ifdef _WIN32 -#include <share.h> // For _SH_DENYWR +#include <share.h>   // For _SH_DENYWR +#include <windows.h> // For OutputDebugStringA  #else  #define _SH_DENYWR 0  #endif @@ -139,12 +140,18 @@ void FileBackend::Write(const Entry& entry) {      if (!file.IsOpen() || bytes_written > MAX_BYTES_WRITTEN) {          return;      } -    bytes_written += file.WriteString(FormatLogMessage(entry) + '\n'); +    bytes_written += file.WriteString(FormatLogMessage(entry).append(1, '\n'));      if (entry.log_level >= Level::Error) {          file.Flush();      }  } +void DebuggerBackend::Write(const Entry& entry) { +#ifdef _WIN32 +    ::OutputDebugStringA(FormatLogMessage(entry).append(1, '\n').c_str()); +#endif +} +  /// Macro listing all log classes. Code should define CLS and SUB as desired before invoking this.  #define ALL_LOG_CLASSES()                                                                          \      CLS(Log)                                                                                       \ diff --git a/src/common/logging/backend.h b/src/common/logging/backend.h index 11edbf1b6..91bb0c309 100644 --- a/src/common/logging/backend.h +++ b/src/common/logging/backend.h @@ -103,6 +103,20 @@ private:      std::size_t bytes_written;  }; +/** + * Backend that writes to Visual Studio's output window + */ +class DebuggerBackend : public Backend { +public: +    static const char* Name() { +        return "debugger"; +    } +    const char* GetName() const override { +        return Name(); +    } +    void Write(const Entry& entry) override; +}; +  void AddBackend(std::unique_ptr<Backend> backend);  void RemoveBackend(std::string_view backend_name); | 
