aboutsummaryrefslogtreecommitdiff
path: root/include/log.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/log.h')
-rw-r--r--include/log.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/include/log.h b/include/log.h
new file mode 100644
index 0000000..8eda4fb
--- /dev/null
+++ b/include/log.h
@@ -0,0 +1,50 @@
+#ifndef LOG_H
+#define LOG_H
+#include <string>
+#include <cstddef>
+
+namespace nitrokey {
+namespace log {
+
+enum class Loglevel : int { DEBUG_L2, DEBUG, INFO, WARNING, ERROR };
+
+class LogHandler {
+ public:
+ virtual void print(const std::string &, Loglevel lvl) = 0;
+
+ protected:
+ std::string loglevel_to_str(Loglevel);
+};
+
+class StdlogHandler : public LogHandler {
+ public:
+ virtual void print(const std::string &, Loglevel lvl);
+};
+
+extern StdlogHandler stdlog_handler;
+
+class Log {
+ public:
+ Log() : mp_loghandler(&stdlog_handler), m_loglevel(Loglevel::WARNING) {}
+
+ static Log &instance() {
+ if (mp_instance == NULL) mp_instance = new Log;
+ return *mp_instance;
+ }
+
+ void operator()(const std::string &, Loglevel);
+
+ void set_loglevel(Loglevel lvl) { m_loglevel = lvl; }
+
+ void set_handler(LogHandler *handler) { mp_loghandler = handler; }
+
+ private:
+ Loglevel m_loglevel;
+ LogHandler *mp_loghandler;
+
+ static Log *mp_instance;
+};
+}
+}
+
+#endif