Logger.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * 2D Game Engine
  3. * Logger.cpp:
  4. * Based on pikuma.com 2D game engine in C++ and Lua course
  5. * Copyright (c) 2021 986-Studio. All rights reserved.
  6. *
  7. * Created by Manoël Trapier on 11/02/2021.
  8. */
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <stdint.h>
  12. #include <stdarg.h>
  13. #include <time.h>
  14. #include <Logger.h>
  15. typedef struct logData
  16. {
  17. char name[7];
  18. uint8_t colour;
  19. } logData;
  20. static logData dataTable[] =
  21. {
  22. [LOG_LOG] = { "LOG", 32 },
  23. [LOG_ERROR] = { "ERROR", 31 },
  24. [LOG_WARNING] = { "WARN", 33 },
  25. [LOG_INFO] = { "INFO", 36 },
  26. [LOG_CRITICAL] = { "CRITIC", 101 },
  27. [LOG_DEBUG] = { "DEBUG", 35 },
  28. };
  29. std::vector<LogEntry> Logger::messages;
  30. static void printLastLog()
  31. {
  32. LogEntry entry = Logger::messages.back();
  33. char buf[30];
  34. struct tm *p = localtime(&entry.timestamp);
  35. int typeColour = dataTable[entry.type].colour;
  36. const char *typeName = dataTable[entry.type].name;
  37. strftime(buf, 38, "%d-%b-%Y %H:%M:%S", p);
  38. fprintf(stderr, "\x1B[%d;1m%-6s | %-20s - ", typeColour, typeName, buf);
  39. fprintf(stderr, "%s", entry.message);
  40. fprintf(stderr, "\x1B[0m\n");
  41. }
  42. static void addLog(LogType type, const char *message, va_list params)
  43. {
  44. LogEntry entry;
  45. time_t curtime = time(NULL);
  46. entry.message = (char *)calloc(512, sizeof(char));
  47. vsnprintf(entry.message, 510, message, params);
  48. entry.timestamp = curtime;
  49. entry.type = type;
  50. Logger::messages.push_back(entry);
  51. printLastLog();
  52. }
  53. void Logger::Log(const char *message, ...)
  54. {
  55. va_list list;
  56. va_start(list, message);
  57. addLog(LOG_LOG, message, list);
  58. va_end(list);
  59. }
  60. void Logger::Error(const char *message, ...)
  61. {
  62. va_list list;
  63. va_start(list, message);
  64. addLog(LOG_ERROR, message, list);
  65. va_end(list);
  66. }
  67. void Logger::Warning(const char *message, ...)
  68. {
  69. va_list list;
  70. va_start(list, message);
  71. addLog(LOG_WARNING, message, list);
  72. va_end(list);
  73. }
  74. void Logger::Info(const char *message, ...)
  75. {
  76. va_list list;
  77. va_start(list, message);
  78. addLog(LOG_INFO, message, list);
  79. va_end(list);
  80. }
  81. void Logger::Critical(const char *message, ...)
  82. {
  83. va_list list;
  84. va_start(list, message);
  85. addLog(LOG_CRITICAL, message, list);
  86. va_end(list);
  87. }
  88. void Logger::Debug(const char *message, ...)
  89. {
  90. va_list list;
  91. va_start(list, message);
  92. addLog(LOG_DEBUG, message, list);
  93. va_end(list);
  94. }