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