PcapPlusPlus  22.05
Logger.h
Go to the documentation of this file.
1 #ifndef PCAPPP_LOGGER
2 #define PCAPPP_LOGGER
3 
4 #include <stdio.h>
5 #include <iostream>
6 #include <sstream>
7 #include <iomanip>
8 #include <stdint.h>
9 
10 #ifndef LOG_MODULE
11 #define LOG_MODULE UndefinedLogModule
12 #endif
13 
15 
20 namespace pcpp
21 {
22 
26  enum LogModule
27  {
28  UndefinedLogModule,
73  NumOfLogModules
74  };
75 
94  class Logger
95  {
96  public:
100  enum LogLevel
101  {
105  };
106 
116  typedef void (*LogPrinter)(LogLevel logLevel, const std::string& logMessage, const std::string& file, const std::string& method, const int line);
117 
123  static std::string logLevelAsString(LogLevel logLevel);
124 
130  LogLevel getLogLevel(LogModule module) { return m_LogModulesArray[module]; }
131 
137  void setLogLevel(LogModule module, LogLevel level) { m_LogModulesArray[module] = level; }
138 
144  bool isDebugEnabled(LogModule module) const { return m_LogModulesArray[module] == Debug; }
145 
150  void setAllModlesToLogLevel(LogLevel level) { for (int i=1; i<NumOfLogModules; i++) m_LogModulesArray[i] = level; }
151 
156  void setLogPrinter(LogPrinter printer) { m_LogPrinter = printer; }
157 
161  void resetLogPrinter() { m_LogPrinter = &defaultLogPrinter; }
162 
166  std::string getLastError() { return m_LastError; }
167 
171  void suppressLogs() { m_LogsEnabled = false; }
172 
176  void enableLogs() { m_LogsEnabled = true; }
177 
182  bool logsEnabled() const { return m_LogsEnabled; }
183 
184  template<class T>
185  Logger& operator<<(const T& msg)
186  {
187  (*m_LogStream) << msg;
188  return *this;
189  }
190 
191  std::ostringstream * internalCreateLogStream();
192 
196  void internalPrintLogMessage(std::ostringstream* logStream, Logger::LogLevel logLevel, const char* file, const char* method, int line);
197 
203  static Logger& getInstance()
204  {
205  static Logger instance;
206  return instance;
207  }
208  private:
209  bool m_LogsEnabled;
210  Logger::LogLevel m_LogModulesArray[NumOfLogModules];
211  LogPrinter m_LogPrinter;
212  std::string m_LastError;
213  std::ostringstream* m_LogStream;
214 
215  // private c'tor - this class is a singleton
216  Logger();
217 
218  static void defaultLogPrinter(LogLevel logLevel, const std::string& logMessage, const std::string& file, const std::string& method, const int line);
219  };
220 
221 #define PCPP_LOG_DEBUG(message) do \
222  { \
223  if (pcpp::Logger::getInstance().logsEnabled() && pcpp::Logger::getInstance().isDebugEnabled(LOG_MODULE)) \
224  { \
225  std::ostringstream* sstream = pcpp::Logger::getInstance().internalCreateLogStream(); \
226  (*sstream) << message; \
227  pcpp::Logger::getInstance().internalPrintLogMessage(sstream, pcpp::Logger::Debug, __FILE__, __FUNCTION__, __LINE__); \
228  } \
229  } while(0)
230 
231 #define PCPP_LOG_ERROR(message) do \
232  { \
233  std::ostringstream* sstream = pcpp::Logger::getInstance().internalCreateLogStream(); \
234  (*sstream) << message; \
235  pcpp::Logger::getInstance().internalPrintLogMessage(sstream, pcpp::Logger::Error, __FILE__, __FUNCTION__, __LINE__); \
236  } while (0)
237 
238 } // namespace pcpp
239 
240 #endif /* PCAPPP_LOGGER */
The main namespace for the PcapPlusPlus lib.
LogLevel
Definition: Logger.h:100
IcmpLayer module (Packet++)
Definition: Logger.h:47
Definition: Logger.h:94
static Logger & getInstance()
Definition: Logger.h:203
PfRingDevice module (Pcap++)
Definition: Logger.h:68
void setLogLevel(LogModule module, LogLevel level)
Definition: Logger.h:137
bool isDebugEnabled(LogModule module) const
Definition: Logger.h:144
LogModule
Definition: Logger.h:26
SdpLayer module (Packet++)
Definition: Logger.h:55
SllLayer module (Packet++)
Definition: Logger.h:50
Packet module (Packet++)
Definition: Logger.h:33
RadiusLayer module (Packet++)
Definition: Logger.h:56
std::string getLastError()
Definition: Logger.h:166
DhcpV6Layer module (Packet++)
Definition: Logger.h:52
MBufRawPacket module (Pcap++)
Definition: Logger.h:69
PayloadLayer module (Packet++)
Definition: Logger.h:39
VlanLayer module (Packet++)
Definition: Logger.h:42
IP Utils module (Common++)
Definition: Logger.h:29
NtpLayer module (Packet++)
Definition: Logger.h:63
IPReassembly module (Packet++)
Definition: Logger.h:61
void internalPrintLogMessage(std::ostringstream *logStream, Logger::LogLevel logLevel, const char *file, const char *method, int line)
HttpLayer module (Packet++)
Definition: Logger.h:43
LogLevel getLogLevel(LogModule module)
Definition: Logger.h:130
bool logsEnabled() const
Definition: Logger.h:182
Error log level.
Definition: Logger.h:102
SipLayer module (Packet++)
Definition: Logger.h:54
IgmpLayer module (Packet++)
Definition: Logger.h:53
Info log level.
Definition: Logger.h:103
DnsLayer module (Packet++)
Definition: Logger.h:45
RawPacket module (Packet++)
Definition: Logger.h:32
SSHLayer module (Packet++)
Definition: Logger.h:59
PcapLiveDevice module (Pcap++)
Definition: Logger.h:66
IPSecLayers module (Packet++)
Definition: Logger.h:62
GtpLayer module (Packet++)
Definition: Logger.h:57
DpdkDevice module (Pcap++)
Definition: Logger.h:70
void setLogPrinter(LogPrinter printer)
Definition: Logger.h:156
MplsLayer module (Packet++)
Definition: Logger.h:46
IPv4Layer module (Packet++)
Definition: Logger.h:37
FileDevice module (Pcap++)
Definition: Logger.h:67
Generic Utils (Common++)
Definition: Logger.h:31
static std::string logLevelAsString(LogLevel logLevel)
NetworkUtils module (Pcap++)
Definition: Logger.h:72
SSLLayer module (Packet++)
Definition: Logger.h:49
TcpLayer module (Packet++)
Definition: Logger.h:40
KniDevice module (Pcap++)
Definition: Logger.h:71
GreLayer module (Packet++)
Definition: Logger.h:48
WinPcapLiveDevice module (Pcap++)
Definition: Logger.h:64
WinPcapRemoteDevice module (Pcap++)
Definition: Logger.h:65
void setAllModlesToLogLevel(LogLevel level)
Definition: Logger.h:150
TcpReassembly module (Packet++)
Definition: Logger.h:60
Layer module (Packet++)
Definition: Logger.h:34
ArpLayer module (Packet++)
Definition: Logger.h:35
EthLayer module (Packet++)
Definition: Logger.h:36
void enableLogs()
Definition: Logger.h:176
void resetLogPrinter()
Definition: Logger.h:161
UdpLayer module (Packet++)
Definition: Logger.h:41
GtpLayer module (Packet++)
Definition: Logger.h:58
PPPoELayer module (Packet++)
Definition: Logger.h:44
DhcpLayer module (Packet++)
Definition: Logger.h:51
void(* LogPrinter)(LogLevel logLevel, const std::string &logMessage, const std::string &file, const std::string &method, const int line)
Definition: Logger.h:116
IPv6Layer module (Packet++)
Definition: Logger.h:38
void suppressLogs()
Definition: Logger.h:171
Debug log level.
Definition: Logger.h:104
Table printer module (Common++)
Definition: Logger.h:30