libcamera: Add initial logger
The logger is based on the ostream API, allowing code to log messages in a native way. It automatically logs the time stamp, severity level, file name and line number. Many important features are missing, such as logging to file, logging classes, and log filtering based on the severity level, file name and class. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
81
src/libcamera/log.cpp
Normal file
81
src/libcamera/log.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2018, Google Inc.
|
||||
*
|
||||
* log.h - Logging infrastructure
|
||||
*/
|
||||
|
||||
#include <cstdio>
|
||||
#include <ctime>
|
||||
#include <iomanip>
|
||||
#include <string.h>
|
||||
|
||||
#include "log.h"
|
||||
#include "utils.h"
|
||||
|
||||
/**
|
||||
* \file log.h
|
||||
* \brief Logging infrastructure
|
||||
*/
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
/**
|
||||
* \enum LogSeverity
|
||||
* Log message severity
|
||||
* \var Info
|
||||
* Informational message
|
||||
* \var Warning
|
||||
* Warning message, signals a potential issue
|
||||
* \var Error
|
||||
* Error message, signals an unrecoverable issue
|
||||
*/
|
||||
|
||||
/**
|
||||
* \def LOG(severity)
|
||||
* \brief Log a message
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
static const char *log_severity_name(LogSeverity severity)
|
||||
{
|
||||
static const char * const names[] = {
|
||||
"INFO",
|
||||
"WARN",
|
||||
" ERR",
|
||||
};
|
||||
|
||||
if ((unsigned int)severity < ARRAY_SIZE(names))
|
||||
return names[severity];
|
||||
else
|
||||
return "UNKN";
|
||||
}
|
||||
|
||||
LogMessage::LogMessage(const char *fileName, unsigned int line,
|
||||
LogSeverity severity)
|
||||
{
|
||||
/* Log the timestamp, severity and file information. */
|
||||
struct timespec timestamp;
|
||||
clock_gettime(CLOCK_MONOTONIC, ×tamp);
|
||||
msgStream << "[" << timestamp.tv_sec / (60 * 60) << ":"
|
||||
<< std::setw(2) << (timestamp.tv_sec / 60) % 60 << ":"
|
||||
<< std::setw(2) << timestamp.tv_sec % 60 << "."
|
||||
<< std::setw(9) << timestamp.tv_nsec << "]";
|
||||
|
||||
msgStream << " " << log_severity_name(severity);
|
||||
msgStream << " " << basename(fileName) << ":" << line << " ";
|
||||
}
|
||||
|
||||
LogMessage::~LogMessage()
|
||||
{
|
||||
msgStream << std::endl;
|
||||
|
||||
std::string msg(msgStream.str());
|
||||
fwrite(msg.data(), msg.size(), 1, stderr);
|
||||
fflush(stderr);
|
||||
}
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user