/* * 2D Game Engine * Logger.cpp: * Based on pikuma.com 2D game engine in C++ and Lua course * Copyright (c) 2021 986-Studio. All rights reserved. * * Created by Manoƫl Trapier on 11/02/2021. */ #include #include #include #include #include #include typedef struct logData { char name[7]; uint8_t colour; } logData; static logData dataTable[] = { [LOG_LOG] = { "LOG", 32 }, [LOG_ERROR] = { "ERROR", 31 }, [LOG_WARNING] = { "WARN", 33 }, [LOG_INFO] = { "INFO", 36 }, [LOG_CRITICAL] = { "CRITIC", 101 }, [LOG_DEBUG] = { "DEBUG", 35 }, }; std::vector Logger::messages; static void printLastLog() { LogEntry entry = Logger::messages.back(); char buf[30]; struct tm *p = localtime(&entry.timestamp); int typeColour = dataTable[entry.type].colour; const char *typeName = dataTable[entry.type].name; strftime(buf, 38, "%d-%b-%Y %H:%M:%S", p); fprintf(stderr, "\x1B[%d;1m%-6s | %-20s - ", typeColour, typeName, buf); fprintf(stderr, "%s", entry.message); fprintf(stderr, "\x1B[0m\n"); } static void addLog(LogType type, const char *message, va_list params) { LogEntry entry; time_t curtime = time(NULL); entry.message = (char *)calloc(512, sizeof(char)); vsnprintf(entry.message, 510, message, params); entry.timestamp = curtime; entry.type = type; Logger::messages.push_back(entry); printLastLog(); } void Logger::Log(const char *message, ...) { va_list list; va_start(list, message); addLog(LOG_LOG, message, list); va_end(list); } void Logger::Error(const char *message, ...) { va_list list; va_start(list, message); addLog(LOG_ERROR, message, list); va_end(list); } void Logger::Warning(const char *message, ...) { va_list list; va_start(list, message); addLog(LOG_WARNING, message, list); va_end(list); } void Logger::Info(const char *message, ...) { va_list list; va_start(list, message); addLog(LOG_INFO, message, list); va_end(list); } void Logger::Critical(const char *message, ...) { va_list list; va_start(list, message); addLog(LOG_CRITICAL, message, list); va_end(list); } void Logger::Debug(const char *message, ...) { va_list list; va_start(list, message); addLog(LOG_DEBUG, message, list); va_end(list); }