|
|
@ -17,6 +17,7 @@ |
|
|
#endif
|
|
|
#endif
|
|
|
|
|
|
|
|
|
#include "common/assert.h"
|
|
|
#include "common/assert.h"
|
|
|
|
|
|
#include "common/fs/file.h"
|
|
|
#include "common/fs/fs.h"
|
|
|
#include "common/fs/fs.h"
|
|
|
#include "common/logging/backend.h"
|
|
|
#include "common/logging/backend.h"
|
|
|
#include "common/logging/log.h"
|
|
|
#include "common/logging/log.h"
|
|
|
@ -140,10 +141,14 @@ private: |
|
|
std::chrono::steady_clock::time_point time_origin{std::chrono::steady_clock::now()}; |
|
|
std::chrono::steady_clock::time_point time_origin{std::chrono::steady_clock::now()}; |
|
|
}; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
ConsoleBackend::~ConsoleBackend() = default; |
|
|
|
|
|
|
|
|
void ConsoleBackend::Write(const Entry& entry) { |
|
|
void ConsoleBackend::Write(const Entry& entry) { |
|
|
PrintMessage(entry); |
|
|
PrintMessage(entry); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ColorConsoleBackend::~ColorConsoleBackend() = default; |
|
|
|
|
|
|
|
|
void ColorConsoleBackend::Write(const Entry& entry) { |
|
|
void ColorConsoleBackend::Write(const Entry& entry) { |
|
|
PrintColoredMessage(entry); |
|
|
PrintColoredMessage(entry); |
|
|
} |
|
|
} |
|
|
@ -157,16 +162,19 @@ FileBackend::FileBackend(const std::filesystem::path& filename) { |
|
|
void(FS::RemoveFile(old_filename)); |
|
|
void(FS::RemoveFile(old_filename)); |
|
|
void(FS::RenameFile(filename, old_filename)); |
|
|
void(FS::RenameFile(filename, old_filename)); |
|
|
|
|
|
|
|
|
file = FS::IOFile(filename, FS::FileAccessMode::Write, FS::FileType::TextFile); |
|
|
|
|
|
|
|
|
file = |
|
|
|
|
|
std::make_unique<FS::IOFile>(filename, FS::FileAccessMode::Write, FS::FileType::TextFile); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
FileBackend::~FileBackend() = default; |
|
|
|
|
|
|
|
|
void FileBackend::Write(const Entry& entry) { |
|
|
void FileBackend::Write(const Entry& entry) { |
|
|
// prevent logs from going over the maximum size (in case its spamming and the user doesn't
|
|
|
// prevent logs from going over the maximum size (in case its spamming and the user doesn't
|
|
|
// know)
|
|
|
// know)
|
|
|
constexpr std::size_t MAX_BYTES_WRITTEN = 100 * 1024 * 1024; |
|
|
constexpr std::size_t MAX_BYTES_WRITTEN = 100 * 1024 * 1024; |
|
|
constexpr std::size_t MAX_BYTES_WRITTEN_EXTENDED = 1024 * 1024 * 1024; |
|
|
constexpr std::size_t MAX_BYTES_WRITTEN_EXTENDED = 1024 * 1024 * 1024; |
|
|
|
|
|
|
|
|
if (!file.IsOpen()) { |
|
|
|
|
|
|
|
|
if (!file->IsOpen()) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -176,12 +184,14 @@ void FileBackend::Write(const Entry& entry) { |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bytes_written += file.WriteString(FormatLogMessage(entry).append(1, '\n')); |
|
|
|
|
|
|
|
|
bytes_written += file->WriteString(FormatLogMessage(entry).append(1, '\n')); |
|
|
if (entry.log_level >= Level::Error) { |
|
|
if (entry.log_level >= Level::Error) { |
|
|
void(file.Flush()); |
|
|
|
|
|
|
|
|
void(file->Flush()); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
DebuggerBackend::~DebuggerBackend() = default; |
|
|
|
|
|
|
|
|
void DebuggerBackend::Write(const Entry& entry) { |
|
|
void DebuggerBackend::Write(const Entry& entry) { |
|
|
#ifdef _WIN32
|
|
|
#ifdef _WIN32
|
|
|
::OutputDebugStringW(UTF8ToUTF16W(FormatLogMessage(entry).append(1, '\n')).c_str()); |
|
|
::OutputDebugStringW(UTF8ToUTF16W(FormatLogMessage(entry).append(1, '\n')).c_str()); |
|
|
|