Files
plains/src/core/include/Logger.hpp
T
2021-03-26 22:35:27 +01:00

68 lines
1.5 KiB
C++

#ifndef LOGGER_HPP
#define LOGGER_HPP
#include <string>
#include <fstream>
#define CC(COLOR) CC_##COLOR
#define CC_RESET "\033[0m"
#define CC_BLACK "\e[0;30m"
#define CC_RED "\e[0;31m"
#define CC_GREEN "\e[0;32m"
#define CC_YELLOW "\e[0;33m"
#define CC_BLUE "\e[0;34m"
#define CC_PURPLE "\e[0;35m"
#define CC_CYAN "\e[0;36m"
#define CC_WHITE "\e[0;37m"
namespace Plains {
namespace Core {
using std::string;
using std::ofstream;
//using std::ostream;
//using std::streambuf;
class Logger {
public:
enum Level { DEBUG, INFO, WARN, FATAL };
Logger(Level logLevel);
~Logger();
void setLogLevel(Level level);
void log(Level lvl, const char* msg);
void log(Level lvl, const string& msg);
static const char commit = 0;
class Sink {
private:
bool _lineIsPrefixed;
Logger& _parent;
const Logger::Level _level;
const char* _colorCode;
void prefixLine(bool resetToFalse = false);
public:
Sink(const Level level, Logger& parent);
void ln (const string& msg);
void ln (const char* msg);
Sink& operator<<(const char character);
Sink& operator<<(const string& msg);
Sink& operator<<(const char* msg);
Sink& operator<<(const int msg);
Sink& operator<<(const long msg);
Sink& operator<<(const unsigned long msg);
};
Sink debug, info, warn, fatal;
private:
enum Level _logLevel;
ofstream* _output;
static string genTimeStamp();
};
}}
#endif