/************************************ * file enc : utf8 * author : wuyanyi09@gmail.com ************************************/ #ifndef LIMONP_LOGGER_H #define LIMONP_LOGGER_H #include #include #include #include #include #include #include "io_functs.hpp" #include "str_functs.hpp" #define LogDebug(fmt, ...) Logger::LoggingF(LL_DEBUG, __FILE__, __LINE__, fmt, ## __VA_ARGS__) #define LogInfo(fmt, ...) Logger::LoggingF(LL_INFO, __FILE__, __LINE__, fmt, ## __VA_ARGS__) #define LogWarn(fmt, ...) Logger::LoggingF(LL_WARN, __FILE__, __LINE__, fmt, ## __VA_ARGS__) #define LogError(fmt, ...) Logger::LoggingF(LL_ERROR, __FILE__, __LINE__, fmt, ## __VA_ARGS__) #define LogFatal(fmt, ...) Logger::LoggingF(LL_FATAL, __FILE__, __LINE__, fmt, ## __VA_ARGS__) namespace Limonp { using namespace std; enum {LL_DEBUG = 0, LL_INFO = 1, LL_WARN = 2, LL_ERROR = 3, LL_FATAL = 4, LEVEL_ARRAY_SIZE = 5, CSTR_BUFFER_SIZE = 1024}; static const char * LOG_LEVEL_ARRAY[LEVEL_ARRAY_SIZE]= {"DEBUG","INFO","WARN","ERROR","FATAL"}; static const char * LOG_FORMAT = "%s %s:%d %s %s\n"; static const char * LOG_TIME_FORMAT = "%Y-%m-%d %H:%M:%S"; class Logger { public: static bool Logging(uint level, const string& msg, const char* fileName, int lineNo) { if(level > LL_FATAL) { cerr<<"level's value is out of range"< -1 && n < size) { msg.resize(n); break; } if (n > -1) size = n + 1; else size *= 2; } return Logging(level, msg, fileName, lineNo); } }; } #endif