common: logging: backend: Wrap IOFile in a unique_ptr
Allows us to forward declare Common::FS::IOFile.
This commit is contained in:
parent
56afd4ab4b
commit
8150c65c07
2 changed files with 27 additions and 6 deletions
|
@ -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());
|
||||||
|
|
|
@ -8,10 +8,13 @@
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include "common/fs/file.h"
|
|
||||||
#include "common/logging/filter.h"
|
#include "common/logging/filter.h"
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
|
|
||||||
|
namespace Common::FS {
|
||||||
|
class IOFile;
|
||||||
|
}
|
||||||
|
|
||||||
namespace Common::Log {
|
namespace Common::Log {
|
||||||
|
|
||||||
class Filter;
|
class Filter;
|
||||||
|
@ -38,6 +41,7 @@ struct Entry {
|
||||||
class Backend {
|
class Backend {
|
||||||
public:
|
public:
|
||||||
virtual ~Backend() = default;
|
virtual ~Backend() = default;
|
||||||
|
|
||||||
virtual void SetFilter(const Filter& new_filter) {
|
virtual void SetFilter(const Filter& new_filter) {
|
||||||
filter = new_filter;
|
filter = new_filter;
|
||||||
}
|
}
|
||||||
|
@ -53,6 +57,8 @@ private:
|
||||||
*/
|
*/
|
||||||
class ConsoleBackend : public Backend {
|
class ConsoleBackend : public Backend {
|
||||||
public:
|
public:
|
||||||
|
~ConsoleBackend() override;
|
||||||
|
|
||||||
static const char* Name() {
|
static const char* Name() {
|
||||||
return "console";
|
return "console";
|
||||||
}
|
}
|
||||||
|
@ -67,6 +73,8 @@ public:
|
||||||
*/
|
*/
|
||||||
class ColorConsoleBackend : public Backend {
|
class ColorConsoleBackend : public Backend {
|
||||||
public:
|
public:
|
||||||
|
~ColorConsoleBackend() override;
|
||||||
|
|
||||||
static const char* Name() {
|
static const char* Name() {
|
||||||
return "color_console";
|
return "color_console";
|
||||||
}
|
}
|
||||||
|
@ -83,6 +91,7 @@ public:
|
||||||
class FileBackend : public Backend {
|
class FileBackend : public Backend {
|
||||||
public:
|
public:
|
||||||
explicit FileBackend(const std::filesystem::path& filename);
|
explicit FileBackend(const std::filesystem::path& filename);
|
||||||
|
~FileBackend() override;
|
||||||
|
|
||||||
static const char* Name() {
|
static const char* Name() {
|
||||||
return "file";
|
return "file";
|
||||||
|
@ -95,7 +104,7 @@ public:
|
||||||
void Write(const Entry& entry) override;
|
void Write(const Entry& entry) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
FS::IOFile file;
|
std::unique_ptr<FS::IOFile> file;
|
||||||
std::size_t bytes_written = 0;
|
std::size_t bytes_written = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -104,6 +113,8 @@ private:
|
||||||
*/
|
*/
|
||||||
class DebuggerBackend : public Backend {
|
class DebuggerBackend : public Backend {
|
||||||
public:
|
public:
|
||||||
|
~DebuggerBackend() override;
|
||||||
|
|
||||||
static const char* Name() {
|
static const char* Name() {
|
||||||
return "debugger";
|
return "debugger";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue