12 #include "ObjectPool.h"
15 # define LOG_MODULE UndefinedLogModule
20 # define PCAPPP_FILENAME __FILE_NAME__
22 # define PCAPPP_FILENAME __FILE__
29 #define PCPP_LOG_LEVEL_OFF 0
30 #define PCPP_LOG_LEVEL_ERROR 1
31 #define PCPP_LOG_LEVEL_WARN 2
32 #define PCPP_LOG_LEVEL_INFO 3
33 #define PCPP_LOG_LEVEL_DEBUG 4
37 #ifndef PCPP_ACTIVE_LOG_LEVEL
38 # define PCPP_ACTIVE_LOG_LEVEL PCPP_LOG_LEVEL_DEBUG
143 const char*
function =
nullptr;
152 Off = PCPP_LOG_LEVEL_OFF,
153 Error = PCPP_LOG_LEVEL_ERROR,
154 Warn = PCPP_LOG_LEVEL_WARN,
155 Info = PCPP_LOG_LEVEL_INFO,
156 Debug = PCPP_LOG_LEVEL_DEBUG
159 inline std::ostream& operator<<(std::ostream& ostr,
LogLevel lvl)
161 return ostr << static_cast<std::underlying_type_t<LogLevel>>(lvl);
206 std::ostringstream m_Stream;
252 using LogPrinter = std::function<void(
LogLevel logLevel,
const std::string& logMessage,
const std::string& file,
253 const std::string& method,
const int line)>;
265 return m_LogModulesArray[module];
273 m_LogModulesArray[module] = level;
290 return level !=
LogLevel::Off && m_LogModulesArray[module] >= level;
297 for (
int i = 1; i < NumOfLogModules; i++)
299 m_LogModulesArray[i] = level;
307 m_LogPrinter = printer;
316 return { m_LastError.data() };
322 m_LogsEnabled =
false;
328 m_LogsEnabled =
true;
335 return m_LogsEnabled;
347 m_UseContextPooling = enabled;
349 if (m_UseContextPooling)
351 m_LogContextPool.setMaxSize(maxPoolSize);
355 m_LogContextPool.preallocate(preallocate);
361 m_LogContextPool.clear();
392 void emit(std::unique_ptr<internal::LogContext> message);
396 std::array<LogLevel, NumOfLogModules> m_LogModulesArray{};
401 static thread_local std::array<char, 255> m_LastError;
403 bool m_UseContextPooling =
true;
413 #define PCPP_LOG(level, message) \
416 auto& logger = pcpp::Logger::getInstance(); \
417 if (logger.shouldLog(level, LOG_MODULE)) \
420 logger.createLogContext(level, pcpp::LogSource(LOG_MODULE, PCAPPP_FILENAME, __FUNCTION__, __LINE__)); \
422 logger.emit(std::move(ctx)); \
426 #if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_DEBUG
427 # define PCPP_LOG_DEBUG(message) PCPP_LOG(pcpp::LogLevel::Debug, message)
429 # define PCPP_LOG_DEBUG(message) (void)0
432 #if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_WARN
433 # define PCPP_LOG_WARN(message) PCPP_LOG(pcpp::LogLevel::Warn, message)
435 # define PCPP_LOG_WARN(message) (void)0
438 #if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_INFO
439 # define PCPP_LOG_INFO(message) PCPP_LOG(pcpp::LogLevel::Info, message)
441 # define PCPP_LOG_INFO(message) (void)0
444 #if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_ERROR
445 # define PCPP_LOG_ERROR(message) PCPP_LOG(pcpp::LogLevel::Error, message)
447 # define PCPP_LOG_ERROR(message) (void)0
void setLogPrinter(LogPrinter printer)
Definition: Logger.h:305
void enableLogs()
Enable logs in all PcapPlusPlus modules.
Definition: Logger.h:326
void emit(LogSource const &source, LogLevel level, std::string const &message)
Directly emits a log message bypassing all level checks.
void setLogLevel(LogModule module, LogLevel level)
Definition: Logger.h:271
std::string getLastError() const
Definition: Logger.h:314
LogLevel getLogLevel(LogModule module)
Definition: Logger.h:263
void useContextPooling(bool enabled, std::size_t preallocate=2, std::size_t maxPoolSize=10)
Controls if the logger should use a pool of LogContext objects.
Definition: Logger.h:345
bool shouldLog(LogLevel level, LogModule module) const
Check whether a log level should be emitted by the logger.
Definition: Logger.h:288
bool logsEnabled() const
Definition: Logger.h:333
void resetLogPrinter()
Set the log printer back to the default printer.
static Logger & getInstance()
Definition: Logger.h:368
std::unique_ptr< internal::LogContext > createLogContext()
Creates a new LogContext with Info level and no source.
void emit(std::unique_ptr< internal::LogContext > message)
Directly emits a log message bypassing all level checks.
void suppressLogs()
Suppress logs in all PcapPlusPlus modules.
Definition: Logger.h:320
static std::string logLevelAsString(LogLevel logLevel)
std::unique_ptr< internal::LogContext > createLogContext(LogLevel level, LogSource const &source={})
Creates a new LogContext with the given level and source.
std::function< void(LogLevel logLevel, const std::string &logMessage, const std::string &file, const std::string &method, const int line)> LogPrinter
Definition: Logger.h:253
bool isDebugEnabled(LogModule module) const
Definition: Logger.h:279
void setAllModulesToLogLevel(LogLevel level)
Definition: Logger.h:295
A generic object pool implementation.
Definition: ObjectPool.h:24
A context encapsulating the details of a single log message to be passed to the Logger.
Definition: Logger.h:172
LogContext()=default
Creates a context with an empty message with Info level and no source.
LogContext(LogLevel level, LogSource const &source={})
Creates a context with an empty message with the given level and source.
Definition: Logger.h:182
void init(LogLevel level, LogSource const &source)
Initializes the context with an empty message and the given level and source.
Definition: Logger.h:188
LogContext & operator<<(T const &value)
Appends to the message.
Definition: Logger.h:199
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
@ PCPP_DEPRECATED
Deprecated typo, use OsiModelSessionLayer instead.
Definition: ProtocolType.h:437
std::string getErrorString(int errnum)
LogModule
An enum representing all PcapPlusPlus modules.
Definition: Logger.h:52
@ PacketLogModuleRawPacket
RawPacket module (Packet++)
Definition: Logger.h:57
@ PacketLogModulePayloadLayer
PayloadLayer module (Packet++)
Definition: Logger.h:65
@ PcapLogModuleXdpDevice
XdpDevice module (Pcap++)
Definition: Logger.h:115
@ PacketLogModuleUdpLayer
UdpLayer module (Packet++)
Definition: Logger.h:67
@ PacketLogModuleGeneveLayer
GeneveLayer module (Packet++)
Definition: Logger.h:105
@ PacketLogModuleS7CommLayer
S7CommLayer module (Packet++)
Definition: Logger.h:106
@ PacketLogModuleTelnetLayer
TelnetLayer module (Packet++)
Definition: Logger.h:94
@ CommonLogModuleTablePrinter
Table printer module (Common++)
Definition: Logger.h:55
@ PacketLogModuleFtpLayer
FtpLayer module (Packet++)
Definition: Logger.h:98
@ PacketLogModuleGreLayer
GreLayer module (Packet++)
Definition: Logger.h:75
@ PacketLogModuleLLCLayer
LLCLayer module (Packet++)
Definition: Logger.h:96
@ PacketLogModuleVlanLayer
VlanLayer module (Packet++)
Definition: Logger.h:68
@ PcapLogModuleKniDevice
KniDevice module (Pcap++)
Definition: Logger.h:114
@ PacketLogModuleSomeIpLayer
SomeIpLayer module (Packet++)
Definition: Logger.h:99
@ PacketLogModuleEthLayer
EthLayer module (Packet++)
Definition: Logger.h:62
@ PacketLogModuleSll2Layer
Sll2Layer module (Packet++)
Definition: Logger.h:78
@ PacketLogModuleSdpLayer
SdpLayer module (Packet++)
Definition: Logger.h:84
@ PacketLogModuleIPv4Layer
IPv4Layer module (Packet++)
Definition: Logger.h:63
@ PacketLogModuleArpLayer
ArpLayer module (Packet++)
Definition: Logger.h:61
@ PacketLogModuleRadiusLayer
RadiusLayer module (Packet++)
Definition: Logger.h:85
@ PacketLogModuleDhcpV6Layer
DhcpV6Layer module (Packet++)
Definition: Logger.h:81
@ PacketLogModuleSipLayer
SipLayer module (Packet++)
Definition: Logger.h:83
@ PacketLogModuleNflogLayer
NflogLayer module (Packet++)
Definition: Logger.h:79
@ PcapLogModuleRemoteDevice
WinPcapRemoteDevice module (Pcap++)
Definition: Logger.h:108
@ PacketLogModuleNdpLayer
NdpLayer module (Packet++)
Definition: Logger.h:97
@ CommonLogModuleIpUtils
IP Utils module (Common++)
Definition: Logger.h:54
@ PacketLogModuleIcmpLayer
IcmpLayer module (Packet++)
Definition: Logger.h:73
@ PacketLogModuleNtpLayer
NtpLayer module (Packet++)
Definition: Logger.h:93
@ PacketLogModuleVrrpLayer
Vrrp Record module (Packet++)
Definition: Logger.h:89
@ PcapLogModuleFileDevice
FileDevice module (Pcap++)
Definition: Logger.h:110
@ PacketLogModuleGtpLayer
GtpLayer module (Packet++)
Definition: Logger.h:86
@ PacketLogModuleSSHLayer
SSHLayer module (Packet++)
Definition: Logger.h:88
@ PacketLogModuleDhcpLayer
DhcpLayer module (Packet++)
Definition: Logger.h:80
@ PcapLogModuleDpdkDevice
DpdkDevice module (Pcap++)
Definition: Logger.h:113
@ PacketLogModuleWakeOnLanLayer
WakeOnLanLayer module (Packet++)
Definition: Logger.h:101
@ PacketLogModulePPPoELayer
PPPoELayer module (Packet++)
Definition: Logger.h:70
@ PacketLogModuleIPReassembly
IPReassembly module (Packet++)
Definition: Logger.h:91
@ PacketLogModuleTcpReassembly
TcpReassembly module (Packet++)
Definition: Logger.h:90
@ PacketLogModuleHttpLayer
HttpLayer module (Packet++)
Definition: Logger.h:69
@ PacketLogModuleWireGuardLayer
WireGuardLayer module (Packet++)
Definition: Logger.h:103
@ PacketLogModuleBgpLayer
GtpLayer module (Packet++)
Definition: Logger.h:87
@ PacketLogModuleSllLayer
SllLayer module (Packet++)
Definition: Logger.h:77
@ CommonLogModuleGenericUtils
Generic Utils (Common++)
Definition: Logger.h:56
@ PacketLogModuleIgmpLayer
IgmpLayer module (Packet++)
Definition: Logger.h:82
@ PacketLogModuleStpLayer
StpLayer module (Packet++)
Definition: Logger.h:95
@ PcapLogModuleWinPcapLiveDevice
WinPcapLiveDevice module (Pcap++)
Definition: Logger.h:107
@ PacketLogModuleIPv6Layer
IPv6Layer module (Packet++)
Definition: Logger.h:64
@ PacketLogModuleMplsLayer
MplsLayer module (Packet++)
Definition: Logger.h:72
@ PacketLogModuleAsn1Codec
Asn1Codec module (Packet++)
Definition: Logger.h:60
@ PcapLogModuleNetworkUtils
Network Utils module (Pcap++)
Definition: Logger.h:116
@ PacketLogModuleDnsLayer
DnsLayer module (Packet++)
Definition: Logger.h:71
@ PacketLogModuleDoIpLayer
DoipLayer module (Packet++)
Definition: Logger.h:104
@ PcapLogModulePfRingDevice
PfRingDevice module (Pcap++)
Definition: Logger.h:111
@ PacketLogModuleSSLLayer
SSLLayer module (Packet++)
Definition: Logger.h:76
@ PacketLogModulePacket
Packet module (Packet++)
Definition: Logger.h:58
@ PacketLogModuleSomeIpSdLayer
SomeIpSdLayer module (Packet++)
Definition: Logger.h:100
@ PcapLogModuleMBufRawPacket
MBufRawPacket module (Pcap++)
Definition: Logger.h:112
@ PacketLogModuleLayer
Layer module (Packet++)
Definition: Logger.h:59
@ PacketLogModuleTcpLayer
TcpLayer module (Packet++)
Definition: Logger.h:66
@ PacketLogModuleIcmpV6Layer
IcmpV6Layer module (Packet++)
Definition: Logger.h:74
@ PcapLogModuleLiveDevice
PcapLiveDevice module (Pcap++)
Definition: Logger.h:109
@ PacketLogModuleSmtpLayer
SmtpLayer module (Packet++)
Definition: Logger.h:102
@ PacketLogModuleIPSecLayer
IPSecLayers module (Packet++)
Definition: Logger.h:92
LogLevel
Definition: Logger.h:151
@ Info
Info level logs and above are emitted.
@ Warn
Warning level logs and above are emitted.
@ Error
Error level logs are emitted.
@ Debug
Debug level logs and above are emitted.
@ Off
No log messages are emitted.
const char * function
Definition: Logger.h:143
LogModule logModule
Definition: Logger.h:145
constexpr LogSource()=default
Default constructor for LogSource.
constexpr LogSource(LogModule logModule)
Definition: Logger.h:130
constexpr LogSource(LogModule logModule, const char *file, const char *function, int line)
Definition: Logger.h:138
const char * file
Definition: Logger.h:142
int line
Definition: Logger.h:144