git / moonbite-core / src/libmw/include/mw/common/Logger.h · raw

#pragma once#include <mw/util/StringUtil.h>#include <functional>namespace LoggerAPI{    enum LogLevel : uint8_t    {        NONE = 0,        TRACE = 1,        DBG = 2,  // Named DBG to avoid conflict with -DDEBUG preprocessor macro        INFO = 3,        WARN = 4,        ERR = 5    };    void Initialize(const std::function<void(const std::string&)>& log_callback);    void Log(        const LoggerAPI::LogLevel log_level,        const std::string& function,        const size_t line,        const std::string& message    ) noexcept;}template<typename ... Args>static void LOG_F(    const LoggerAPI::LogLevel log_level,    const std::string& function,    const size_t line,    const char* format,    const Args& ... args) noexcept{    try    {        std::string message = StringUtil::Format(format, args...);        LoggerAPI::Log(log_level, function, line, message);    }    catch (std::exception&)    {        // Logger failure should not disrupt program flow    }}// Node Logger#define LOG_TRACE(message) LoggerAPI::Log(LoggerAPI::LogLevel::TRACE, __FUNCTION__, __LINE__, message)#define LOG_DEBUG(message) LoggerAPI::Log(LoggerAPI::LogLevel::DBG, __FUNCTION__, __LINE__, message)#define LOG_INFO(message) LoggerAPI::Log(LoggerAPI::LogLevel::INFO, __FUNCTION__, __LINE__, message)#define LOG_WARNING(message) LoggerAPI::Log(LoggerAPI::LogLevel::WARN, __FUNCTION__, __LINE__, message)#define LOG_ERROR(message) LoggerAPI::Log(LoggerAPI::LogLevel::ERR, __FUNCTION__, __LINE__, message)#define LOG_TRACE_F(message, ...) LOG_F(LoggerAPI::LogLevel::TRACE, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define LOG_DEBUG_F(message, ...) LOG_F(LoggerAPI::LogLevel::DBG, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define LOG_INFO_F(message, ...) LOG_F(LoggerAPI::LogLevel::INFO, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define LOG_WARNING_F(message, ...) LOG_F(LoggerAPI::LogLevel::WARN, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define LOG_ERROR_F(message, ...) LOG_F(LoggerAPI::LogLevel::ERR, __FUNCTION__, __LINE__, message, __VA_ARGS__)// Wallet Logger#define WALLET_TRACE(message) LoggerAPI::Log(LoggerAPI::LogLevel::TRACE, __FUNCTION__, __LINE__, message)#define WALLET_DEBUG(message) LoggerAPI::Log(LoggerAPI::LogLevel::DBG, __FUNCTION__, __LINE__, message)#define WALLET_INFO(message) LoggerAPI::Log(LoggerAPI::LogLevel::INFO, __FUNCTION__, __LINE__, message)#define WALLET_WARNING(message) LoggerAPI::Log(LoggerAPI::LogLevel::WARN, __FUNCTION__, __LINE__, message)#define WALLET_ERROR(message) LoggerAPI::Log(LoggerAPI::LogLevel::ERR, __FUNCTION__, __LINE__, message)#define WALLET_TRACE_F(message, ...) LOG_F(LoggerAPI::LogLevel::TRACE, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define WALLET_DEBUG_F(message, ...) LOG_F(LoggerAPI::LogLevel::DBG, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define WALLET_INFO_F(message, ...) LOG_F(LoggerAPI::LogLevel::INFO, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define WALLET_WARNING_F(message, ...) LOG_F(LoggerAPI::LogLevel::WARN, __FUNCTION__, __LINE__, message, __VA_ARGS__)#define WALLET_ERROR_F(message, ...) LOG_F(LoggerAPI::LogLevel::ERR, __FUNCTION__, __LINE__, message, __VA_ARGS__)