diff options
Diffstat (limited to 'include/log.h')
-rw-r--r-- | include/log.h | 50 |
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 |