Log.hpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma once
  2. #include <iostream>
  3. #include <initializer_list>
  4. enum LogType {
  5. DEBUG, INFO, LOAD, WARNING, ERROR
  6. };
  7. class Log {
  8. public:
  9. Log() = delete;
  10. template<typename T, typename... Args>
  11. Log(LogType a, T t, Args... args);
  12. static void setLogLevel(int lv);
  13. private:;
  14. template <typename T>
  15. void print(bool cerr, T t);
  16. template<typename T, typename... Args>
  17. void print(bool cerr, T t, Args... args);
  18. static int level;
  19. };
  20. template<typename T, typename... Args>
  21. Log::Log(LogType a, T t, Args... args)
  22. {
  23. switch(a) {
  24. case LogType::DEBUG:
  25. if(level < 3)
  26. return;
  27. std::cout << "[DEBUG] ";
  28. break;
  29. case LogType::INFO:
  30. if(level < 2)
  31. return;
  32. std::cout << "[INFO] ";
  33. break;
  34. case LogType::LOAD:
  35. if(level < 2)
  36. return;
  37. std::cout << "[LOAD] ";
  38. break;
  39. case LogType::WARNING:
  40. if(level < 3)
  41. return;
  42. std::cout << "[WARNING] ";
  43. break;
  44. case LogType::ERROR:
  45. if(level < 1)
  46. return;
  47. std::cerr << "[ERROR] ";
  48. break;
  49. default:
  50. std::cout << " ";
  51. break;
  52. }
  53. print(a == ERROR, t, args...);
  54. if(a == ERROR) {
  55. std::cerr << std::endl;
  56. }
  57. else {
  58. std::cout << std::endl;
  59. }
  60. }
  61. template <typename T>
  62. void Log::print(bool cerr, T t)
  63. {
  64. if(cerr) {
  65. std::cerr << t;
  66. }
  67. else {
  68. std::cout << t;
  69. }
  70. }
  71. template<typename T, typename... Args>
  72. void Log::print(bool cerr, T t, Args... args)
  73. {
  74. if(cerr) {
  75. std::cerr << t;
  76. }
  77. else {
  78. std::cout << t;
  79. }
  80. print(cerr, args...);
  81. }