libcamera: log: Add a LogFatal log level
The LogFatal log level is similar to the LogError level, but additionally abort program execution. This is useful to implement assertion handlers. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
e256a58bf0
commit
99a3e7bcfb
2 changed files with 17 additions and 4 deletions
|
@ -16,6 +16,7 @@ enum LogSeverity {
|
|||
LogInfo,
|
||||
LogWarning,
|
||||
LogError,
|
||||
LogFatal,
|
||||
};
|
||||
|
||||
class LogMessage
|
||||
|
@ -30,6 +31,7 @@ public:
|
|||
|
||||
private:
|
||||
std::ostringstream msgStream;
|
||||
LogSeverity severity_;
|
||||
};
|
||||
|
||||
#define LOG(severity) LogMessage(__FILE__, __LINE__, Log##severity).stream()
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <iomanip>
|
||||
#include <string.h>
|
||||
|
@ -31,6 +32,8 @@ namespace libcamera {
|
|||
* Warning message, signals a potential issue
|
||||
* \var LogError
|
||||
* Error message, signals an unrecoverable issue
|
||||
* \var LogFatal
|
||||
* Fatal message, signals an unrecoverable issue and aborts execution
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -40,15 +43,19 @@ namespace libcamera {
|
|||
* Return an std::ostream reference to which a message can be logged using the
|
||||
* iostream API. The \a severity controls whether the message is printed or
|
||||
* dropped, depending on the global log level.
|
||||
*
|
||||
* If the severity is set to Fatal, execution is aborted and the program
|
||||
* terminates immediately after printing the message.
|
||||
*/
|
||||
|
||||
static const char *log_severity_name(LogSeverity severity)
|
||||
{
|
||||
static const char * const names[] = {
|
||||
" DBG",
|
||||
"INFO",
|
||||
"WARN",
|
||||
" INFO",
|
||||
" WARN",
|
||||
" ERR",
|
||||
"FATAL",
|
||||
};
|
||||
|
||||
if (static_cast<unsigned int>(severity) < ARRAY_SIZE(names))
|
||||
|
@ -73,6 +80,7 @@ static const char *log_severity_name(LogSeverity severity)
|
|||
*/
|
||||
LogMessage::LogMessage(const char *fileName, unsigned int line,
|
||||
LogSeverity severity)
|
||||
: severity_(severity)
|
||||
{
|
||||
/* Log the timestamp, severity and file information. */
|
||||
struct timespec timestamp;
|
||||
|
@ -93,6 +101,9 @@ LogMessage::~LogMessage()
|
|||
std::string msg(msgStream.str());
|
||||
fwrite(msg.data(), msg.size(), 1, stderr);
|
||||
fflush(stderr);
|
||||
|
||||
if (severity_ == LogSeverity::LogFatal)
|
||||
std::abort();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue