1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #pragma once
- #include <sys/timeb.h>
- #include <string>
- #include <memory>
- #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
- //-----------------------------------------------------------------------------
|