aboutsummaryrefslogtreecommitdiffstats
path: root/yage
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-11-02 12:46:35 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-11-02 12:46:35 +0000
commit8b23c5f125140efcdd97912d4b2df20531b0a557 (patch)
tree0afbd7bb7b7ad2f52e74c8709b5e26f8164345f0 /yage
parentf49044c9886accc91dfd29056241da3b48324640 (diff)
downloadYAGE-8b23c5f125140efcdd97912d4b2df20531b0a557.tar.gz
YAGE-8b23c5f125140efcdd97912d4b2df20531b0a557.zip
Adding logging system
Diffstat (limited to 'yage')
-rw-r--r--yage/core/logger.cpp37
-rw-r--r--yage/core/logger.h27
-rw-r--r--yage/core/logmessage.cpp32
-rw-r--r--yage/core/logmessage.h65
-rw-r--r--yage/core/logsink.h27
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