common: logging: backend: Wrap IOFile in a unique_ptr

Allows us to forward declare Common::FS::IOFile.
This commit is contained in:
Morph 2021-06-13 07:52:02 -04:00
parent 88f735f55a
commit 9fa79c001d
2 changed files with 27 additions and 6 deletions

View file

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