#ifndef PCAPPP_LOGGER #define PCAPPP_LOGGER #include #include #ifndef LOG_MODULE #define LOG_MODULE UndefinedLogModule #endif /// @file /** * \namespace pcpp * \brief The main namespace for the PcapPlusPlus lib */ namespace pcpp { /** * An enum representing all PcapPlusPlus modules */ enum LogModule { UndefinedLogModule, CommonLogModuleIpUtils, ///< IP Utils module (Common++) CommonLogModuleTablePrinter, ///< Table printer module (Common++) CommonLogModuleGenericUtils, ///< Generic Utils (Common++) PacketLogModuleRawPacket, ///< RawPacket module (Packet++) PacketLogModulePacket, ///< Packet module (Packet++) PacketLogModuleLayer, ///< Layer module (Packet++) PacketLogModuleArpLayer, ///< ArpLayer module (Packet++) PacketLogModuleEthLayer, ///< EthLayer module (Packet++) PacketLogModuleIPv4Layer, ///< IPv4Layer module (Packet++) PacketLogModuleIPv6Layer, ///< IPv6Layer module (Packet++) PacketLogModulePayloadLayer, ///< PayloadLayer module (Packet++) PacketLogModuleTcpLayer, ///< TcpLayer module (Packet++) PacketLogModuleUdpLayer, ///< UdpLayer module (Packet++) PacketLogModuleVlanLayer, ///< VlanLayer module (Packet++) PacketLogModuleHttpLayer, ///< HttpLayer module (Packet++) PacketLogModulePPPoELayer, ///< PPPoELayer module (Packet++) PacketLogModuleDnsLayer, ///< DnsLayer module (Packet++) PacketLogModuleMplsLayer, ///< MplsLayer module (Packet++) PacketLogModuleIcmpLayer, ///< IcmpLayer module (Packet++) PacketLogModuleGreLayer, ///< GreLayer module (Packet++) PacketLogModuleSSLLayer, ///< SSLLayer module (Packet++) PacketLogModuleSllLayer, ///< SllLayer module (Packet++) PacketLogModuleDhcpLayer, ///< DhcpLayer module (Packet++) PacketLogModuleIgmpLayer, ///< IgmpLayer module (Packet++) PacketLogModuleSipLayer, ///< SipLayer module (Packet++) PacketLogModuleSdpLayer, ///< SdpLayer module (Packet++) PacketLogModuleRadiusLayer, ///< RadiusLayer module (Packet++) PacketLogModuleGtpLayer, ///< GtpLayer module (Packet++) PacketLogModuleTcpReassembly, ///< TcpReassembly module (Packet++) PacketLogModuleIPReassembly, ///< IPReassembly module (Packet++) PcapLogModuleWinPcapLiveDevice, ///< WinPcapLiveDevice module (Pcap++) PcapLogModuleRemoteDevice, ///< WinPcapRemoteDevice module (Pcap++) PcapLogModuleLiveDevice, ///< PcapLiveDevice module (Pcap++) PcapLogModuleFileDevice, ///< FileDevice module (Pcap++) PcapLogModulePfRingDevice, ///< PfRingDevice module (Pcap++) PcapLogModuleMBufRawPacket, ///< MBufRawPacket module (Pcap++) PcapLogModuleDpdkDevice, ///< DpdkDevice module (Pcap++) PcapLogModuleKniDevice, ///< KniDevice module (Pcap++) NetworkUtils, ///< NetworkUtils module (Pcap++) NumOfLogModules }; /** * @class LoggerPP * The PcapPlusPlus log manager class. * PcapPlusPlus uses this logger to output both error and debug logs. * * Debug logs: PcapPlusPlus is divided into modules (described in LogModule enum). The user can set each module or all modules to output or suppress debug messages. The default is suppressing debug messages. * Changing debug log level for modules can be done dynamically while application is running. * * Error logs: errors are printed by default to stderr. The user can change this behavior in several manners: * 1. Suppress errors - no errors will be printed (for all modules) * 2. Print error logs to a string provided by the user instead of stderr * * PcapPlusPlus logger is a singleton which can be reached from anywhere in the code * */ class LoggerPP { public: /** * An enum representing the log level. Currently 2 log level are supported: Normal and Debug. Normal is the default log level */ enum LogLevel { Normal, ///< Normal log level Debug ///< Debug log level }; /** * Set the log level for a certain PcapPlusPlus module * @param[in] module PcapPlusPlus module * @param[in] level The log level to set the module to */ void setLogLevel(LogModule module, LogLevel level) { m_LogModulesArray[module] = level; } /** * Set all PcapPlusPlus modules to a certain log leve * @param[in] level The log level to set all modules to */ void setAllModlesToLogLevel(LogLevel level) { for (int i=1; i