Skip to content

Added a warning log level. #1872

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 12, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions Common++/header/Logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,9 @@
// Allows for conditional removal of unwanted log calls at compile time.
#define PCPP_LOG_LEVEL_OFF 0
#define PCPP_LOG_LEVEL_ERROR 1
#define PCPP_LOG_LEVEL_INFO 2
#define PCPP_LOG_LEVEL_DEBUG 3
#define PCPP_LOG_LEVEL_WARN 2
#define PCPP_LOG_LEVEL_INFO 3
#define PCPP_LOG_LEVEL_DEBUG 4

// All log messages built via a PCPP_LOG_* macro below the PCPP_ACTIVE_LOG_LEVEL will be removed at compile time.
// Uses the PCPP_ACTIVE_LOG_LEVEL if it is defined, otherwise defaults to PCAP_LOG_LEVEL_DEBUG
Expand Down Expand Up @@ -146,6 +147,7 @@ namespace pcpp
{
Off = PCPP_LOG_LEVEL_OFF, ///< No log messages are emitted.
Error = PCPP_LOG_LEVEL_ERROR, ///< Error level logs are emitted.
Warn = PCPP_LOG_LEVEL_WARN, ///< Warning level logs and above are emitted.
Info = PCPP_LOG_LEVEL_INFO, ///< Info level logs and above are emitted.
Debug = PCPP_LOG_LEVEL_DEBUG ///< Debug level logs and above are emitted.
};
Expand Down Expand Up @@ -430,6 +432,12 @@ namespace pcpp
# define PCPP_LOG_DEBUG(message) (void)0
#endif

#if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_WARN
# define PCPP_LOG_WARN(message) PCPP_LOG(pcpp::LogLevel::Warn, message)
#else
# define PCPP_LOG_WARN(message) (void)0
#endif

#if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_INFO
# define PCPP_LOG_INFO(message) PCPP_LOG(pcpp::LogLevel::Info, message)
#else
Expand Down
38 changes: 28 additions & 10 deletions Tests/Pcap++Test/Tests/LoggerTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,20 @@

namespace pcpp
{
#define PCPP_TEST_EXPECTED_DEBUG_LOG_LINE 20
#define PCPP_TEST_EXPECTED_WARN_LOG_LINE 25
#define PCPP_TEST_EXPECTED_ERROR_LOG_LINE 30

void invokeDebugLog()
{
PCPP_LOG_DEBUG("debug log");
}

void invokeWarnLog(const std::string& message = "")
{
PCPP_LOG_WARN("warn log" << message);
}

void invokeErrorLog(const std::string& message = "")
{
PCPP_LOG_ERROR("error log" << message);
Expand Down Expand Up @@ -208,6 +217,7 @@ PTF_TEST_CASE(TestLogger)
PTF_ASSERT_FALSE(logger.isDebugEnabled(moduleEnum));

PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Error, moduleEnum));
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Warn, moduleEnum));
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Info, moduleEnum));
PTF_ASSERT_FALSE(logger.shouldLog(LogLevel::Debug, moduleEnum));
PTF_ASSERT_FALSE(logger.shouldLog(LogLevel::Off, moduleEnum));
Expand All @@ -224,31 +234,38 @@ PTF_TEST_CASE(TestLogger)
PTF_ASSERT_NULL(LogPrinter::lastMethodSeen);

pcpp::invokeErrorLog();
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)pcpp::Logger::Error);
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Error);
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "error log");
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeErrorLog");
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 21);
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_ERROR_LOG_LINE);

// change one module log level
logger.setLogLevel(pcpp::PacketLogModuleArpLayer, pcpp::Logger::Debug);
logger.setLogLevel(pcpp::PacketLogModuleArpLayer, LogLevel::Debug);
PTF_ASSERT_EQUAL(logger.getLogLevel(pcpp::PacketLogModuleArpLayer), pcpp::LogLevel::Debug, enum);
PTF_ASSERT_TRUE(logger.isDebugEnabled(pcpp::PacketLogModuleArpLayer));

// invoke debug and error logs - expect to see both
// invoke debug, warn and error logs - expect to see all
pcpp::invokeDebugLog();
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)pcpp::Logger::Debug);
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Debug);
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "debug log");
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeDebugLog");
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 16);
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_DEBUG_LOG_LINE);

pcpp::invokeWarnLog();
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Warn);
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "warn log");
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeWarnLog");
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_WARN_LOG_LINE);

pcpp::invokeErrorLog();
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)pcpp::Logger::Error);
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Error);
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "error log");
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeErrorLog");
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 21);
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_ERROR_LOG_LINE);

// verify the last error message
PTF_ASSERT_EQUAL(logger.getLastError(), "error log");
Expand All @@ -263,6 +280,7 @@ PTF_TEST_CASE(TestLogger)
PTF_ASSERT_TRUE(logger.isDebugEnabled(static_cast<LogModule>(moduleEnum)));

PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Error, moduleEnum));
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Warn, moduleEnum));
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Info, moduleEnum));
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Debug, moduleEnum));
PTF_ASSERT_FALSE(logger.shouldLog(LogLevel::Off, moduleEnum));
Expand All @@ -274,7 +292,7 @@ PTF_TEST_CASE(TestLogger)
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "debug log");
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeDebugLog");
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 16);
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_DEBUG_LOG_LINE);

// suppress logs
PTF_ASSERT_TRUE(logger.logsEnabled())
Expand Down Expand Up @@ -305,7 +323,7 @@ PTF_TEST_CASE(TestLogger)
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeErrorLog");
PTF_ASSERT_EQUAL(logger.getLastError(), "error log");
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 21);
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_ERROR_LOG_LINE);

// reset LogPrinter
LogPrinter::clean();
Expand Down
Loading