aboutsummaryrefslogtreecommitdiff
path: root/include/log.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/log.h')
-rw-r--r--include/log.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/include/log.h b/include/log.h
new file mode 100644
index 0000000..f6f7193
--- /dev/null
+++ b/include/log.h
@@ -0,0 +1,63 @@
+#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