summaryrefslogtreecommitdiff
path: root/include/log.h
diff options
context:
space:
mode:
authorMateusz Zalega <mateusz@appliedsourcery.com>2015-10-22 23:07:23 +0200
committerMateusz Zalega <mateusz@appliedsourcery.com>2015-10-26 20:49:55 +0100
commit9b8ebc6ed1a1fdc15c404774bf102c883a34d990 (patch)
treefce9205359704dcce84a1f770878901fbc9c2b3e /include/log.h
parentc4aec144256e3f27fedd8f8de03e10cc08eecab8 (diff)
downloadlibnitrokey-9b8ebc6ed1a1fdc15c404774bf102c883a34d990.tar.gz
libnitrokey-9b8ebc6ed1a1fdc15c404774bf102c883a34d990.tar.bz2
Minor fixes, working version
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