#include #include #include #include #include "Logger.h" LogLevelType Logger::LogLevel = TraceLevel; #ifdef DEBUG void Logger::Trace(char* msgfmt, ...) { va_list args; va_start(args, msgfmt); Logger::Log(TraceLevel, msgfmt, args); } void Logger::Debug(char* msgfmt, ...) { va_list args; va_start(args, msgfmt); Logger::Log(DebugLevel, msgfmt, args); } void Logger::Info(char* msgfmt, ...) { va_list args; va_start(args, msgfmt); Logger::Log(InfoLevel, msgfmt, args); } void Logger::Warn(char* msgfmt, ...) { va_list args; va_start(args, msgfmt); Logger::Log(WarnLevel, msgfmt, args); } void Logger::Error(char* msgfmt, ...) { va_list args; va_start(args, msgfmt); Logger::Log(ErrorLevel, msgfmt, args); } void Logger::Fatal(char* msgfmt, ...) { va_list args; va_start(args, msgfmt); Logger::Log(FatalLevel, msgfmt, args); } void Logger::Log(LogLevelType logLevel, char* msgfmt, ...) { va_list args; va_start(args, msgfmt); Logger::Log(logLevel, msgfmt, args); } void Logger::Log(LogLevelType logLevel, char* msgfmt, va_list args) { time_t rawtime = time(NULL); struct tm *lctime = localtime(&rawtime); char time_str[10] = {0}; strftime(time_str, 10, "%H:%M:%S", lctime); char log_level_str[6] = {0}; switch (logLevel) { default: case TraceLevel: strcpy(log_level_str, "Trace"); break; case DebugLevel: strcpy(log_level_str, "Debug"); break; case InfoLevel: strcpy(log_level_str, "Info"); break; case WarnLevel: strcpy(log_level_str, "Warn"); break; case ErrorLevel: strcpy(log_level_str, "Error"); break; case FatalLevel: strcpy(log_level_str, "Fatal"); break; } char *newfmt = new char[strlen(msgfmt) + 24]; sprintf(newfmt, "[%s] %-6s: %s", time_str, log_level_str, msgfmt); vfprintf(stderr, newfmt, args); } #endif