#pragma once #include #include #include #include "Log4CPP.Define.hpp" #include "Log4CPP.LogLevel.hpp" //----------------------------------------------------------------------------- // LoggingEvent //----------------------------------------------------------------------------- namespace Log4CPP { struct LoggingEvent { TLogString LoggerName; const char * Message = nullptr; int BytesOfMessage = 0; enLogLevel LogLevel; DWORD ThreadID = 0; struct timeb TimeStamp; bool WithLayout = false; unsigned long SeriesNo = 0; tTraceID TraceID = 0; LoggingEvent () = default; LoggingEvent (LoggingEvent && from) { LoggerName = std::move (from.LoggerName); Message = from.Message; BytesOfMessage = from.BytesOfMessage; LogLevel = from.LogLevel; ThreadID = from.ThreadID; TimeStamp = from.TimeStamp; WithLayout = from.WithLayout; SeriesNo = from.SeriesNo; TraceID = from.TraceID; } LoggingEvent (const LoggingEvent & from) { LoggerName = from.LoggerName; Message = from.Message; BytesOfMessage = from.BytesOfMessage; LogLevel = from.LogLevel; ThreadID = from.ThreadID; TimeStamp = from.TimeStamp; WithLayout = from.WithLayout; SeriesNo = from.SeriesNo; TraceID = from.TraceID; } private: // static unsigned long gSeriesNo; }; }; //----------------------------------------------------------------------------- // 暂时无法实现 LoggingEvent 的序列号. 原因如下: (2021-12-14) // 1. 如果把 gSeriesNo 设计成 inline static, 则需要 C++ 14 以上版本, // 而且, 即使 C++ 14 以上, 在不同的模块中, 看见的是不同的 gSeriesNo, // 这样 SeriesNo 就混乱了, 也失去了 SeriesNo 的意义了 // 2. 如果把 gSeriesNo 设计成 static, 则需要 LoggingEvent.cpp, // 并且还需要把 LoggingEvent 设计成 dllexport, 这又会造成 Log4CPP.dll 与 Log4CPP.Layout.dll 两个模块互相依赖 // 3. 未来版本, 如果实在需要 SeriesNo, 可以把 Logger 中的基础类拆分出来, 设计成一个更基础的 dll 组件 // 4. 目前的构建顺序及依赖关系如下: // 1) Log4CPP.TLSLog // 2) Log4CPP.Utility // 3) Log4CPP.Layout // 4) Log4CPP // 5) BackgroundTask // 6) NetSocket // 7) Log4CPP.Appender // 8) Log4CPP.Appender.UDP // 9) Log4CPP.Appender.ZeroMQ // 10) TCPServer // 11) UDPServer // 10) Log4CPP.Appender.Telnet //-----------------------------------------------------------------------------