Log4CPP.LoggingEvent.hpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include <sys/timeb.h>
  3. #include <string>
  4. #include <memory>
  5. #include "Log4CPP.Define.hpp"
  6. #include "Log4CPP.LogLevel.hpp"
  7. //-----------------------------------------------------------------------------
  8. // LoggingEvent
  9. //-----------------------------------------------------------------------------
  10. namespace Log4CPP
  11. {
  12. struct LoggingEvent
  13. {
  14. TLogString LoggerName;
  15. const char * Message = nullptr;
  16. int BytesOfMessage = 0;
  17. enLogLevel LogLevel;
  18. DWORD ThreadID = 0;
  19. struct timeb TimeStamp;
  20. bool WithLayout = false;
  21. unsigned long SeriesNo = 0;
  22. tTraceID TraceID = 0;
  23. LoggingEvent () = default;
  24. LoggingEvent (LoggingEvent && from)
  25. {
  26. LoggerName = std::move (from.LoggerName);
  27. Message = from.Message;
  28. BytesOfMessage = from.BytesOfMessage;
  29. LogLevel = from.LogLevel;
  30. ThreadID = from.ThreadID;
  31. TimeStamp = from.TimeStamp;
  32. WithLayout = from.WithLayout;
  33. SeriesNo = from.SeriesNo;
  34. TraceID = from.TraceID;
  35. }
  36. LoggingEvent (const LoggingEvent & from)
  37. {
  38. LoggerName = from.LoggerName;
  39. Message = from.Message;
  40. BytesOfMessage = from.BytesOfMessage;
  41. LogLevel = from.LogLevel;
  42. ThreadID = from.ThreadID;
  43. TimeStamp = from.TimeStamp;
  44. WithLayout = from.WithLayout;
  45. SeriesNo = from.SeriesNo;
  46. TraceID = from.TraceID;
  47. }
  48. private:
  49. // static unsigned long gSeriesNo;
  50. };
  51. };
  52. //-----------------------------------------------------------------------------
  53. // 暂时无法实现 LoggingEvent 的序列号. 原因如下: (2021-12-14)
  54. // 1. 如果把 gSeriesNo 设计成 inline static, 则需要 C++ 14 以上版本,
  55. // 而且, 即使 C++ 14 以上, 在不同的模块中, 看见的是不同的 gSeriesNo,
  56. // 这样 SeriesNo 就混乱了, 也失去了 SeriesNo 的意义了
  57. // 2. 如果把 gSeriesNo 设计成 static, 则需要 LoggingEvent.cpp,
  58. // 并且还需要把 LoggingEvent 设计成 dllexport, 这又会造成 Log4CPP.dll 与 Log4CPP.Layout.dll 两个模块互相依赖
  59. // 3. 未来版本, 如果实在需要 SeriesNo, 可以把 Logger 中的基础类拆分出来, 设计成一个更基础的 dll 组件
  60. // 4. 目前的构建顺序及依赖关系如下:
  61. // 1) Log4CPP.TLSLog
  62. // 2) Log4CPP.Utility
  63. // 3) Log4CPP.Layout
  64. // 4) Log4CPP
  65. // 5) BackgroundTask
  66. // 6) NetSocket
  67. // 7) Log4CPP.Appender
  68. // 8) Log4CPP.Appender.UDP
  69. // 9) Log4CPP.Appender.ZeroMQ
  70. // 10) TCPServer
  71. // 11) UDPServer
  72. // 10) Log4CPP.Appender.Telnet
  73. //-----------------------------------------------------------------------------