Logger.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 <stdint.h>
  11. #include <stdarg.h>
  12. #include <time.h>
  13. #include <Logger.h>
  14. typedef struct logData
  15. {
  16. char name[7];
  17. uint8_t colour;
  18. } logData;
  19. static logData dataTable[] =
  20. {
  21. [LOG_INFO] = { "INFO", 36 },
  22. [LOG_ERROR] = { "ERROR", 31 },
  23. [LOG_WARNING] = { "WARN", 33 },
  24. [LOG_LOG] = { "LOG", 32 },
  25. [LOG_CRITICAL] = { "CRITIC", 35 },
  26. };
  27. std::vector<LogEntry> Logger::messages;
  28. static void printLastLog()
  29. {
  30. LogEntry entry = Logger::messages.back();
  31. char buf[30];
  32. struct tm *p = localtime(&entry.timestamp);
  33. int typeColour = dataTable[entry.type].colour;
  34. const char *typeName = dataTable[entry.type].name;
  35. strftime(buf, 38, "%d-%b-%Y %H:%M:%S", p);
  36. fprintf(stderr, "\x1B[%d;1m%-6s | %-20s - ", typeColour, typeName, buf);
  37. fprintf(stderr, "%s", entry.message);
  38. fprintf(stderr, "\x1B[0m\n");
  39. }
  40. static void addLog(LogType type, const char *message, va_list params)
  41. {
  42. LogEntry entry;
  43. time_t curtime = time(NULL);
  44. entry.message = (char *)calloc(512, sizeof(char));
  45. vsnprintf(entry.message, 510, message, params);
  46. entry.timestamp = curtime;
  47. entry.type = type;
  48. Logger::messages.push_back(entry);
  49. printLastLog();
  50. }
  51. void Logger::Log(const char *message, ...)
  52. {
  53. va_list list;
  54. va_start(list, message);
  55. addLog(LOG_LOG, message, list);
  56. va_end(list);
  57. }
  58. void Logger::Error(const char *message, ...)
  59. {
  60. va_list list;
  61. va_start(list, message);
  62. addLog(LOG_ERROR, message, list);
  63. va_end(list);
  64. }
  65. void Logger::Warning(const char *message, ...)
  66. {
  67. va_list list;
  68. va_start(list, message);
  69. addLog(LOG_WARNING, message, list);
  70. va_end(list);
  71. }
  72. void Logger::Info(const char *message, ...)
  73. {
  74. va_list list;
  75. va_start(list, message);
  76. addLog(LOG_INFO, message, list);
  77. va_end(list);
  78. }
  79. void Logger::Critical(const char *message, ...)
  80. {
  81. va_list list;
  82. va_start(list, message);
  83. addLog(LOG_CRITICAL, message, list);
  84. va_end(list);
  85. }