Skip to content

Commit ed08e08

Browse files
authored
Added a warning log level. (#1872)
* Added warning level to log levels. * Added unit tests for warn log. Parameterised hardcoded line tests.
1 parent 824ea14 commit ed08e08

File tree

2 files changed

+38
-12
lines changed

2 files changed

+38
-12
lines changed

Common++/header/Logger.h

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,9 @@
2727
// Allows for conditional removal of unwanted log calls at compile time.
2828
#define PCPP_LOG_LEVEL_OFF 0
2929
#define PCPP_LOG_LEVEL_ERROR 1
30-
#define PCPP_LOG_LEVEL_INFO 2
31-
#define PCPP_LOG_LEVEL_DEBUG 3
30+
#define PCPP_LOG_LEVEL_WARN 2
31+
#define PCPP_LOG_LEVEL_INFO 3
32+
#define PCPP_LOG_LEVEL_DEBUG 4
3233

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

435+
#if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_WARN
436+
# define PCPP_LOG_WARN(message) PCPP_LOG(pcpp::LogLevel::Warn, message)
437+
#else
438+
# define PCPP_LOG_WARN(message) (void)0
439+
#endif
440+
433441
#if PCPP_ACTIVE_LOG_LEVEL >= PCPP_LOG_LEVEL_INFO
434442
# define PCPP_LOG_INFO(message) PCPP_LOG(pcpp::LogLevel::Info, message)
435443
#else

Tests/Pcap++Test/Tests/LoggerTests.cpp

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,20 @@
1111

1212
namespace pcpp
1313
{
14+
#define PCPP_TEST_EXPECTED_DEBUG_LOG_LINE 20
15+
#define PCPP_TEST_EXPECTED_WARN_LOG_LINE 25
16+
#define PCPP_TEST_EXPECTED_ERROR_LOG_LINE 30
17+
1418
void invokeDebugLog()
1519
{
1620
PCPP_LOG_DEBUG("debug log");
1721
}
1822

23+
void invokeWarnLog(const std::string& message = "")
24+
{
25+
PCPP_LOG_WARN("warn log" << message);
26+
}
27+
1928
void invokeErrorLog(const std::string& message = "")
2029
{
2130
PCPP_LOG_ERROR("error log" << message);
@@ -208,6 +217,7 @@ PTF_TEST_CASE(TestLogger)
208217
PTF_ASSERT_FALSE(logger.isDebugEnabled(moduleEnum));
209218

210219
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Error, moduleEnum));
220+
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Warn, moduleEnum));
211221
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Info, moduleEnum));
212222
PTF_ASSERT_FALSE(logger.shouldLog(LogLevel::Debug, moduleEnum));
213223
PTF_ASSERT_FALSE(logger.shouldLog(LogLevel::Off, moduleEnum));
@@ -224,31 +234,38 @@ PTF_TEST_CASE(TestLogger)
224234
PTF_ASSERT_NULL(LogPrinter::lastMethodSeen);
225235

226236
pcpp::invokeErrorLog();
227-
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)pcpp::Logger::Error);
237+
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Error);
228238
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "error log");
229239
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
230240
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeErrorLog");
231-
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 21);
241+
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_ERROR_LOG_LINE);
232242

233243
// change one module log level
234-
logger.setLogLevel(pcpp::PacketLogModuleArpLayer, pcpp::Logger::Debug);
244+
logger.setLogLevel(pcpp::PacketLogModuleArpLayer, LogLevel::Debug);
235245
PTF_ASSERT_EQUAL(logger.getLogLevel(pcpp::PacketLogModuleArpLayer), pcpp::LogLevel::Debug, enum);
236246
PTF_ASSERT_TRUE(logger.isDebugEnabled(pcpp::PacketLogModuleArpLayer));
237247

238-
// invoke debug and error logs - expect to see both
248+
// invoke debug, warn and error logs - expect to see all
239249
pcpp::invokeDebugLog();
240-
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)pcpp::Logger::Debug);
250+
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Debug);
241251
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "debug log");
242252
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
243253
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeDebugLog");
244-
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 16);
254+
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_DEBUG_LOG_LINE);
255+
256+
pcpp::invokeWarnLog();
257+
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Warn);
258+
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "warn log");
259+
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
260+
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeWarnLog");
261+
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_WARN_LOG_LINE);
245262

246263
pcpp::invokeErrorLog();
247-
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)pcpp::Logger::Error);
264+
PTF_ASSERT_EQUAL(LogPrinter::lastLogLevelSeen, (int)LogLevel::Error);
248265
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "error log");
249266
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
250267
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeErrorLog");
251-
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 21);
268+
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_ERROR_LOG_LINE);
252269

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

265282
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Error, moduleEnum));
283+
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Warn, moduleEnum));
266284
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Info, moduleEnum));
267285
PTF_ASSERT_TRUE(logger.shouldLog(LogLevel::Debug, moduleEnum));
268286
PTF_ASSERT_FALSE(logger.shouldLog(LogLevel::Off, moduleEnum));
@@ -274,7 +292,7 @@ PTF_TEST_CASE(TestLogger)
274292
PTF_ASSERT_EQUAL(*LogPrinter::lastLogMessageSeen, "debug log");
275293
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
276294
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeDebugLog");
277-
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 16);
295+
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_DEBUG_LOG_LINE);
278296

279297
// suppress logs
280298
PTF_ASSERT_TRUE(logger.logsEnabled())
@@ -305,7 +323,7 @@ PTF_TEST_CASE(TestLogger)
305323
PTF_ASSERT_EQUAL(getLowerCaseFileName(*LogPrinter::lastFilenameSeen), "loggertests.cpp");
306324
PTF_ASSERT_EQUAL(getMethodWithoutNamespace(*LogPrinter::lastMethodSeen), "invokeErrorLog");
307325
PTF_ASSERT_EQUAL(logger.getLastError(), "error log");
308-
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, 21);
326+
PTF_ASSERT_EQUAL(LogPrinter::lastLineSeen, PCPP_TEST_EXPECTED_ERROR_LOG_LINE);
309327

310328
// reset LogPrinter
311329
LogPrinter::clean();

0 commit comments

Comments
 (0)