From db6480dccd9a3dbf4100a824930a36251f4e743c Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Fri, 5 Jan 2018 15:56:35 +0000 Subject: [Engine] Log levels added to engine. --- yage/core/camera.cpp | 8 +++++++ yage/core/camera.h | 1 + yage/core/imageloader.cpp | 2 +- yage/core/logger.cpp | 55 +++++++++++++++++++++++++++++++++++------------ yage/core/logger.h | 29 ++++++++++++++++++++++--- yage/core/loglevel.h | 14 ++++++++---- yage/core/logmessage.cpp | 6 +++--- yage/core/logmessage.h | 7 ++++-- yage/core/logsink.cpp | 33 ++++++++++++++++++++++++++-- 9 files changed, 126 insertions(+), 29 deletions(-) (limited to 'yage/core') diff --git a/yage/core/camera.cpp b/yage/core/camera.cpp index c492351f..d52c8996 100644 --- a/yage/core/camera.cpp +++ b/yage/core/camera.cpp @@ -9,6 +9,8 @@ #include "camera.h" #include "../render/shader.h" +#include "logger.h" + #include #include @@ -43,4 +45,10 @@ void Camera::move(const glm::vec2 &direction) update_matrix_ = true; } +void Camera::zoom(float factor) +{ + scale_ += factor; + update_matrix_ = true; +} + } // namespace yage diff --git a/yage/core/camera.h b/yage/core/camera.h index ba07d423..63bf15ca 100644 --- a/yage/core/camera.h +++ b/yage/core/camera.h @@ -30,6 +30,7 @@ public: void update(Shader &program); void move(const glm::vec2 &direction); + void zoom(float factor); }; } // namespace yage diff --git a/yage/core/imageloader.cpp b/yage/core/imageloader.cpp index 5a60e83b..23bc9a25 100644 --- a/yage/core/imageloader.cpp +++ b/yage/core/imageloader.cpp @@ -46,7 +46,7 @@ Texture ImageLoader::loadPng(const std::string &file_path) glGenerateMipmap(GL_TEXTURE_2D); - yLog << "Successfully loaded texture: " << file_path; + yLogDebug << "Successfully loaded texture: " << file_path; return texture; } diff --git a/yage/core/logger.cpp b/yage/core/logger.cpp index 3c80cf1b..1ae04d0b 100644 --- a/yage/core/logger.cpp +++ b/yage/core/logger.cpp @@ -19,29 +19,51 @@ namespace yage { -Logger::Logger() : active_(Active::create()) +Logger::Logger() : active_(Active::create()), min_level_(LogLevel::INFO) { add(makeConsoleSink()); - add(makeFileSink("yage.log")); } -LogMessage Logger::operator()(const std::string &fileName, int lineNum) +Logger::Logger(const std::string &file_path) + : active_(Active::create()), min_level_(LogLevel::INFO) { - return LogMessage(this, fileName, lineNum); + add(makeConsoleSink()); + add(makeFileSink(file_path)); +} + +Logger::Logger(LogLevel min_level) + : active_(Active::create()), min_level_(min_level) +{ + add(makeConsoleSink()); +} + +Logger::Logger(LogLevel min_level, const std::string &file_path) + : active_(Active::create()), min_level_(min_level) +{ + add(makeConsoleSink()); + add(makeFileSink(file_path)); +} + +LogMessage Logger::operator()(LogLevel level, const std::string &fileName, + int lineNum) +{ + return LogMessage(this, level, fileName, lineNum); } void Logger::flush(const LogMessage *msg) { - std::string asString(msg->buffer_.str()); + if (static_cast(msg->meta_.level) >= static_cast(min_level_)) { + std::string asString(msg->buffer_.str()); - auto &&sinks = sinks_; - auto &&meta = msg->meta_; + auto &&sinks = sinks_; + auto &&meta = msg->meta_; - active_->send([=] { - for (auto &&sink : sinks) { - sink.write(meta, asString); - } - }); + active_->send([=] { + for (auto &&sink : sinks) { + sink.write(meta, asString); + } + }); + } } void Logger::add(const LogSink &sink) @@ -65,9 +87,14 @@ void Logger::clear() Logger &Logger::instance() { - static Logger yLogger; + static Logger y_logger(LogLevel::INFO, "yage.log"); + + return y_logger; +} - return yLogger; +void Logger::setLevel(LogLevel min_level) +{ + min_level_ = min_level; } } // namespace yage diff --git a/yage/core/logger.h b/yage/core/logger.h index d1f75aec..2423f3c3 100644 --- a/yage/core/logger.h +++ b/yage/core/logger.h @@ -14,6 +14,7 @@ #include #include "../util/active.h" +#include "loglevel.h" #include "logmessage.h" #include "logsink.h" @@ -23,9 +24,13 @@ namespace yage class Logger { public: - explicit Logger(); + Logger(); + explicit Logger(const std::string &file_path); + explicit Logger(LogLevel min_level); + Logger(LogLevel min_level, const std::string &file_path); - LogMessage operator()(const std::string &fileName, int lineNum); + LogMessage operator()(LogLevel level = LogLevel::INFO, const std::string &fileName = "", + int lineNum = -1); void flush(const LogMessage *msg); void add(const LogSink &sink); @@ -34,13 +39,31 @@ public: static Logger &instance(); + // setter for the level + void setLevel(LogLevel min_level); + private: std::vector sinks_; std::unique_ptr active_; + LogLevel min_level_; }; } // namespace yage -#define yLog (yage::Logger::instance()(__FILE__, __LINE__)) +#define yLogger (yage::Logger::instance()) + +#define yLogDebug \ + (yage::Logger::instance()(yage::LogLevel::DEBUG, __FILE__, __LINE__)) + +#define yLogInfo (yage::Logger::instance()(yage::LogLevel::INFO, __FILE__, __LINE__)) + +#define yLogWarning \ + (yage::Logger::instance()(yage::LogLevel::WARNING, __FILE__, __LINE__)) + +#define yLogError \ + (yage::Logger::instance()(yage::LogLevel::ERROR, __FILE__, __LINE__)) + +#define yLogFatal \ + (yage::Logger::instance()(yage::LogLevel::FATAL, __FILE__, __LINE__)) #endif diff --git a/yage/core/loglevel.h b/yage/core/loglevel.h index eb9ff5f8..78af24af 100644 --- a/yage/core/loglevel.h +++ b/yage/core/loglevel.h @@ -9,10 +9,16 @@ #ifndef YAGE_CORE_LOGLEVEL_H #define YAGE_CORE_LOGLEVEL_H -class LogLevel -{ -public: - LogLevel(); +namespace yage { + +enum class LogLevel { + DEBUG, + INFO, + WARNING, + ERROR, + FATAL, }; +} + #endif diff --git a/yage/core/logmessage.cpp b/yage/core/logmessage.cpp index 1ae16fba..641c96b6 100644 --- a/yage/core/logmessage.cpp +++ b/yage/core/logmessage.cpp @@ -14,9 +14,9 @@ namespace yage { -LogMessage::LogMessage(Logger *owner, const std::string &fileName_i, - int lineNum_i) - : owner_(owner), meta_({fileName_i, lineNum_i}) +LogMessage::LogMessage(Logger *owner, LogLevel level, const std::string &file_name, + int line_num) + : owner_(owner), meta_({level, file_name, line_num}) { } diff --git a/yage/core/logmessage.h b/yage/core/logmessage.h index ef7fd8a5..b6929ba5 100644 --- a/yage/core/logmessage.h +++ b/yage/core/logmessage.h @@ -13,6 +13,8 @@ #include #include +#include "loglevel.h" + namespace yage { @@ -34,8 +36,9 @@ public: LogMessage &operator<<(std::ostream &(*fn)(std::ostream &os)); struct Meta { + LogLevel level; std::string fileName; - int lineNo; + int line; }; private: @@ -45,7 +48,7 @@ private: Logger *owner_; Meta meta_; - LogMessage(Logger *owner, const std::string &fileName_i, int lineNum_i); + LogMessage(Logger *owner, LogLevel level, const std::string &file_name, int line_num); LogMessage(LogMessage &&msg); }; diff --git a/yage/core/logsink.cpp b/yage/core/logsink.cpp index 6680c773..1f026059 100644 --- a/yage/core/logsink.cpp +++ b/yage/core/logsink.cpp @@ -82,8 +82,37 @@ public: auto time_t = system_clock::to_time_t(now); auto local_time = std::localtime(&time_t); - (*fileHandle_) << std::put_time(local_time, "[%H:%M:%S] ") << msg - << " (" << meta.fileName << ":" << meta.lineNo << ")\n"; + std::string level; + + switch (meta.level) { + case LogLevel::DEBUG: + level = "DEBUG"; + break; + case LogLevel::INFO: + level = "INFO"; + break; + case LogLevel::WARNING: + level = "WARNING"; + break; + case LogLevel::ERROR: + level = "ERROR"; + break; + case LogLevel::FATAL: + level = "FATAL"; + break; + } + + (*fileHandle_) << std::put_time(local_time, "[%H:%M:%S] [") << level + << "] " << msg << "\n"; + if (meta.fileName != "") { + (*fileHandle_) << "(" << meta.fileName; + if (meta.line != -1) { + (*fileHandle_) << ":" << meta.line << ")"; + } else { + (*fileHandle_) << ")"; + } + } + (*fileHandle_) << "\n\n"; } private: -- cgit