diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-02 12:46:35 +0000 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-11-02 12:46:35 +0000 |
commit | 8b23c5f125140efcdd97912d4b2df20531b0a557 (patch) | |
tree | 0afbd7bb7b7ad2f52e74c8709b5e26f8164345f0 /yage | |
parent | f49044c9886accc91dfd29056241da3b48324640 (diff) | |
download | YAGE-8b23c5f125140efcdd97912d4b2df20531b0a557.tar.gz YAGE-8b23c5f125140efcdd97912d4b2df20531b0a557.zip |
Adding logging system
Diffstat (limited to 'yage')
-rw-r--r-- | yage/core/logger.cpp | 37 | ||||
-rw-r--r-- | yage/core/logger.h | 27 | ||||
-rw-r--r-- | yage/core/logmessage.cpp | 32 | ||||
-rw-r--r-- | yage/core/logmessage.h | 65 | ||||
-rw-r--r-- | yage/core/logsink.h | 27 |
5 files changed, 186 insertions, 2 deletions
diff --git a/yage/core/logger.cpp b/yage/core/logger.cpp new file mode 100644 index 00000000..f64b908b --- /dev/null +++ b/yage/core/logger.cpp @@ -0,0 +1,37 @@ +/* ---------------------------------------------------------------------------- + * logger.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#include "logger.h" + +#include <iostream> +#include <string> + +using namespace std; + +namespace yage +{ + +LogMessage Logger::operator()() +{ + return LogMessage(this); +} + +void Logger::flush(const LogMessage &msg) +{ + string asString(msg.buffer_.str()); + cout << asString << "\n"; +} + +Logger &Logger::instance() +{ + static Logger gLogger; + + return gLogger; +} + +} // namespace yage diff --git a/yage/core/logger.h b/yage/core/logger.h index 90a958d5..e7187a81 100644 --- a/yage/core/logger.h +++ b/yage/core/logger.h @@ -1,6 +1,29 @@ -#ifndef YAGE_LOGGER_H -#define YAGE_LOGGER_H +/* ---------------------------------------------------------------------------- + * logger.h + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ +#ifndef YAGE_CORE_LOGGER_H +#define YAGE_CORE_LOGGER_H +#include "logmessage.h" + +namespace yage +{ + +class Logger +{ +public: + LogMessage operator()(); + + void flush(const LogMessage &msg); + + static Logger &instance(); +}; + +} // namespace yage #endif diff --git a/yage/core/logmessage.cpp b/yage/core/logmessage.cpp new file mode 100644 index 00000000..aa512042 --- /dev/null +++ b/yage/core/logmessage.cpp @@ -0,0 +1,32 @@ +/* ---------------------------------------------------------------------------- + * logmessage.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#include "logmessage.h" +#include "logger.h" + +namespace yage +{ + +LogMessage::LogMessage(Logger *owner) : owner_(owner) {} + +LogMessage::LogMessage(LogMessage &&msg) : owner_(std::move(msg.owner_)) {} + +LogMessage::~LogMessage() +{ + if (owner_ != nullptr) { + owner_->flush(*this); + } +} + +LogMessage &LogMessage::operator<<(std::ostream &(*fn)(std::ostream &os)) +{ + fn(buffer_); + return *this; +} + +} // namespace yage diff --git a/yage/core/logmessage.h b/yage/core/logmessage.h new file mode 100644 index 00000000..ded40c19 --- /dev/null +++ b/yage/core/logmessage.h @@ -0,0 +1,65 @@ +/* ---------------------------------------------------------------------------- + * logmessage.h + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#ifndef YAGE_CORE_LOGMESSAGE_H +#define YAGE_CORE_LOGMESSAGE_H + +#include <memory> +#include <sstream> +#include <string> + +namespace yage +{ + +class Logger; + +class LogMessage +{ +public: + ~LogMessage(); + + LogMessage(const LogMessage &msg) = delete; + + LogMessage &operator=(const LogMessage &msg) = delete; + LogMessage &operator=(LogMessage &&msg) = delete; + + template <typename T> + LogMessage &operator<<(const T &value); + + LogMessage &operator<<(std::ostream &(*fn)(std::ostream &os)); + + struct Meta { + std::string fileName; + int lineNo; + }; + +private: + friend class Logger; + + std::ostringstream buffer_; + Logger *owner_; + + LogMessage(Logger *owner); + LogMessage(LogMessage &&msg); +}; + +/* ----------------------------------------------------------------------------- + * Template definitions + * ----------------------------------------------------------------------------- + */ + +template <typename T> +LogMessage &LogMessage::operator<<(const T &value) +{ + buffer_ << value; + return *this; +} + +} // namespace yage + +#endif diff --git a/yage/core/logsink.h b/yage/core/logsink.h new file mode 100644 index 00000000..bdfc70cf --- /dev/null +++ b/yage/core/logsink.h @@ -0,0 +1,27 @@ +/* ---------------------------------------------------------------------------- + * logger.cpp + * + * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com> -- MIT License + * See file LICENSE for more details + * ---------------------------------------------------------------------------- + */ + +#ifndef YAGE_CORE_LOGSINK_H +#define YAGE_CORE_LOGSINK_H + +#include "logmessage.h" + +#include <string> + +namespace yage +{ + +class LogSink +{ +public: + void operator()(const LogMessage::Meta &, const std::string &message); +}; + +} // namespace yage + +#endif |