Clone of PhatAC @ https://github.com/floaterxk/PhatAC

Logging.h 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #pragma once
  2. class CLogFile
  3. {
  4. public:
  5. CLogFile();
  6. ~CLogFile();
  7. bool Open(const char *filepath);
  8. void Close();
  9. void Write(const char *text);
  10. private:
  11. FILE *m_File;
  12. };
  13. class CLogger
  14. {
  15. public:
  16. typedef void(*LogFunc_t)(int, int, const char *);
  17. CLogger();
  18. virtual ~CLogger();
  19. bool Open();
  20. void Close();
  21. void Write(int category, int level, const char *format, ...);
  22. void AddLogCallback(LogFunc_t callback) { if (std::find(m_LogCallbacks.begin(), m_LogCallbacks.end(), callback) == m_LogCallbacks.end()) { m_LogCallbacks.push_back(callback); } }
  23. private:
  24. CLogFile m_Log;
  25. std::list<LogFunc_t> m_LogCallbacks;
  26. };
  27. extern CLogger g_Logger;
  28. enum {
  29. LOGLEVEL_Debug = 0,
  30. LOGLEVEL_Verbose,
  31. LOGLEVEL_Normal,
  32. LOGLEVEL_Warning,
  33. LOGLEVEL_Error,
  34. LOGLEVEL_Fatal
  35. };
  36. enum {
  37. LOGCATEGORY_Temp = 0,
  38. LOGCATEGORY_UserInterface,
  39. LOGCATEGORY_Server,
  40. LOGCATEGORY_World,
  41. LOGCATEGORY_Network,
  42. LOGCATEGORY_Object,
  43. LOGCATEGORY_Database,
  44. LOGCATEGORY_Client,
  45. LOGCATEGORY_Player,
  46. LOGCATEGORY_Animation,
  47. LOGCATEGORY_Command
  48. };
  49. #define LOG(category, level, ...) g_Logger.Write(LOGCATEGORY_##category, LOGLEVEL_##level, __VA_ARGS__)
  50. #define LOG_BYTES(category, level, data, len) g_Logger.Write(LOGCATEGORY_##category, LOGLEVEL_##level, DebugBytesToString(data, len).c_str())