#pragma once namespace Feather::Logging { enum class Level { // Serious problems ERROR = -2, // Potential problems of note WARNING = -1, // General messages for end-users INFO = 0, // More advanced information for problem-solving DEBUG = 1, // Fine grained spew TRACE = 2, }; class Channel { }; extern Channel LOG_GENERAL; class Logger { public: void LogDirect(Channel channel, Level level, const char* message, ...); }; extern Logger GlobalLogger; } #define Log_Msg( Channel, Message, Args... ) #define Log_Debug(Message, Args...) #define Log_Info(Message, ...) Feather::Logging::GlobalLogger.LogDirect(Feather::Logging::LOG_GENERAL, Feather::Logging::Level::INFO, Message, ##__VA_ARGS__) #define Log_Warn(Message, Args...)