Program Listing for File Log.hpp
↰ Return to documentation for file (engine/include/Cacao/Log.hpp
)
#pragma once
#include <string>
#include <sstream>
#include <memory>
#include "DllHelper.hpp"
namespace Cacao {
class CACAO_API Logger {
public:
static Logger& Get();
Logger(const Logger&) = delete;
Logger(Logger&&) = delete;
Logger& operator=(const Logger&) = delete;
Logger& operator=(Logger&&) = delete;
enum class Level {
Trace = 0,
Info = 1,
Warn = 2,
Error = 3,
Fatal = 4
};
struct LogToken {
Level lvl;
std::ostringstream oss;
bool isClient;
public:
LogToken() = default;
LogToken(const LogToken&) = delete;
LogToken(LogToken&&) = default;
LogToken& operator=(const LogToken&) = delete;
LogToken& operator=(LogToken&&) = default;
template<typename T>
LogToken& operator<<(const T& value) {
oss << value;
return *this;
}
~LogToken() {
try {
Logger::Get().ImplLog(oss.str(), lvl, isClient);
} catch(...) {}
}
};
static LogToken Engine(Level level = Level::Info);
static LogToken Client(Level level = Level::Info);
private:
struct Impl;
std::unique_ptr<Impl> impl;
void ImplLog(std::string message, Level level, bool isClient);
friend LogToken;
Logger();
~Logger();
};
}