diff options
Diffstat (limited to 'louloulibs/logger')
-rw-r--r-- | louloulibs/logger/logger.cpp | 42 | ||||
-rw-r--r-- | louloulibs/logger/logger.hpp | 128 |
2 files changed, 0 insertions, 170 deletions
diff --git a/louloulibs/logger/logger.cpp b/louloulibs/logger/logger.cpp deleted file mode 100644 index 92a3d9b..0000000 --- a/louloulibs/logger/logger.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include <logger/logger.hpp> -#include <config/config.hpp> - -Logger::Logger(const int log_level): - log_level(log_level), - stream(std::cout.rdbuf()), - null_buffer{}, - null_stream{&null_buffer} -{ -} - -Logger::Logger(const int log_level, const std::string& log_file): - log_level(log_level), - ofstream(log_file.data(), std::ios_base::app), - stream(ofstream.rdbuf()), - null_buffer{}, - null_stream{&null_buffer} -{ -} - -std::unique_ptr<Logger>& Logger::instance() -{ - static std::unique_ptr<Logger> instance; - - if (!instance) - { - const std::string log_file = Config::get("log_file", ""); - const int log_level = Config::get_int("log_level", 0); - if (log_file.empty()) - instance = std::make_unique<Logger>(log_level); - else - instance = std::make_unique<Logger>(log_level, log_file); - } - return instance; -} - -std::ostream& Logger::get_stream(const int lvl) -{ - if (lvl >= this->log_level) - return this->stream; - return this->null_stream; -} diff --git a/louloulibs/logger/logger.hpp b/louloulibs/logger/logger.hpp deleted file mode 100644 index b3284a6..0000000 --- a/louloulibs/logger/logger.hpp +++ /dev/null @@ -1,128 +0,0 @@ -#pragma once - - -/** - * Singleton used in logger macros to write into files or stdout, with - * various levels of severity. - * Only the macros should be used. - * @class Logger - */ - -#include <memory> -#include <iostream> -#include <fstream> - -#define debug_lvl 0 -#define info_lvl 1 -#define warning_lvl 2 -#define error_lvl 3 - -#include "louloulibs.h" -#ifdef SYSTEMD_FOUND -# include <systemd/sd-daemon.h> -#else -# define SD_DEBUG "[DEBUG]: " -# define SD_INFO "[INFO]: " -# define SD_WARNING "[WARNING]: " -# define SD_ERR "[ERROR]: " -#endif - -// Macro defined to get the filename instead of the full path. But if it is -// not properly defined by the build system, we fallback to __FILE__ -#ifndef __FILENAME__ -# define __FILENAME__ __FILE__ -#endif - - -/** - * A buffer, used to construct an ostream that does nothing - * when we output data in it - */ -class NullBuffer: public std::streambuf -{ - public: - int overflow(int c) { return c; } -}; - -class Logger -{ -public: - static std::unique_ptr<Logger>& instance(); - std::ostream& get_stream(const int); - Logger(const int log_level, const std::string& log_file); - Logger(const int log_level); - - Logger(const Logger&) = delete; - Logger& operator=(const Logger&) = delete; - Logger(Logger&&) = delete; - Logger& operator=(Logger&&) = delete; - -private: - const int log_level; - std::ofstream ofstream{}; - std::ostream stream; - - NullBuffer null_buffer; - std::ostream null_stream; -}; - -#define WHERE __FILENAME__, ":", __LINE__, ":\t" - -namespace logging_details -{ - template <typename T> - void log(std::ostream& os, const T& arg) - { - os << arg << std::endl; - } - - template <typename T, typename... U> - void log(std::ostream& os, const T& first, U&&... rest) - { - os << first; - log(os, std::forward<U>(rest)...); - } - - template <typename... U> - void log_debug(U&&... args) - { - auto& os = Logger::instance()->get_stream(debug_lvl); - os << SD_DEBUG; - log(os, std::forward<U>(args)...); - } - - template <typename... U> - void log_info(U&&... args) - { - auto& os = Logger::instance()->get_stream(info_lvl); - os << SD_INFO; - log(os, std::forward<U>(args)...); - } - - template <typename... U> - void log_warning(U&&... args) - { - auto& os = Logger::instance()->get_stream(warning_lvl); - os << SD_WARNING; - log(os, std::forward<U>(args)...); - } - - template <typename... U> - void log_error(U&&... args) - { - auto& os = Logger::instance()->get_stream(error_lvl); - os << SD_ERR; - log(os, std::forward<U>(args)...); - } -} - -#define log_info(...) logging_details::log_info(WHERE, __VA_ARGS__) - -#define log_warning(...) logging_details::log_warning(WHERE, __VA_ARGS__) - -#define log_error(...) logging_details::log_error(WHERE, __VA_ARGS__) - -#define log_debug(...) logging_details::log_debug(WHERE, __VA_ARGS__) - - - |