Logging
Logging levels
Every log message is always associated with some logging level that describes severity of the message. Supported logging levels are defined by the LogLevel
enum (from lowest to highest level):
LOG_LEVEL_ALL
: special value that can be used to enable logging of all messagesLOG_LEVEL_TRACE
: verbose output for debugging purposesLOG_LEVEL_INFO
: regular information messagesLOG_LEVEL_WARN
: warnings and non-critical errorsLOG_LEVEL_ERROR
: error messagesLOG_LEVEL_NONE
: special value that can be used to disable logging of any messages
// EXAMPLE - message logging
Log.trace("This is trace message");
Log.info("This is info message");
Log.warn("This is warning message");
Log.error("This is error message");
// Specify logging level directly
Log(LOG_LEVEL_INFO, "This is info message");
// Log message with the default logging level (LOG_LEVEL_INFO)
Log("This is info message");
For convenience, Logger class (and its default Log
instance) provides separate logging method for each of the defined logging levels.
These messages are limited to 200 characters and are truncated if longer.
If you want to use write longer data, you can use Log.print(str)
which takes a pointer to a null-terminated c-string. Note that the output does not include the timestamp, category, and level, so you may want to preceed it with Log.info()
, etc. but is not length-limited. You cannot use printf-style formating with Log.print()
.
You can also print data in hexadecimal using Log.dump(ptr, len)
to print a buffer in hex as specified by pointer and length. It also does not include the timestamp, category, and level.
Log handlers can be configured to filter out messages that are below a certain logging level. By default, any messages below the LOG_LEVEL_INFO
level are filtered out.
// EXAMPLE - basic filtering
// Log handler processing only warning and error messages
SerialLogHandler logHandler(LOG_LEVEL_WARN);
void setup() {
Log.trace("This is trace message"); // Ignored by the handler
Log.info("This is info message"); // Ignored by the handler
Log.warn("This is warning message");
Log.error("This is error message");
}
void loop() {
}
In the provided example, the trace and info messages will be filtered out according to the log handler settings, which prevent log messages below the LOG_LEVEL_WARN
level from being logged:
0000000050 [app] WARN: This is warning message
0000000100 [app] ERROR: This is error message