libcamera: base: log: Color the log prefix

Add coloring to the log prefix to increase log readability.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Laurent Pinchart
2021-02-03 19:17:46 +01:00
parent 5757038946
commit 6132521b47
2 changed files with 29 additions and 14 deletions

View File

@@ -57,7 +57,8 @@ class LogMessage
{
public:
LogMessage(const char *fileName, unsigned int line,
const LogCategory &category, LogSeverity severity);
const LogCategory &category, LogSeverity severity,
const std::string &prefix = std::string());
LogMessage(LogMessage &&);
~LogMessage();
@@ -68,6 +69,7 @@ public:
LogSeverity severity() const { return severity_; }
const LogCategory &category() const { return category_; }
const std::string &fileInfo() const { return fileInfo_; }
const std::string &prefix() const { return prefix_; }
const std::string msg() const { return msgStream_.str(); }
private:
@@ -80,6 +82,7 @@ private:
LogSeverity severity_;
utils::time_point timestamp_;
std::string fileInfo_;
std::string prefix_;
};
class Loggable

View File

@@ -189,6 +189,7 @@ namespace {
* https://en.wikipedia.org/wiki/ANSI_escape_code#Colors.
*/
constexpr const char *kColorReset = "\033[0m";
constexpr const char *kColorGreen = "\033[0;32m";
constexpr const char *kColorBrightRed = "\033[1;31m";
constexpr const char *kColorBrightGreen = "\033[1;32m";
constexpr const char *kColorBrightYellow = "\033[1;33m";
@@ -215,6 +216,7 @@ void LogOutput::write(const LogMessage &msg)
const char *categoryColor = color_ ? kColorBrightWhite : "";
const char *fileColor = color_ ? kColorBrightBlue : "";
const char *prefixColor = color_ ? kColorGreen : "";
const char *resetColor = color_ ? kColorReset : "";
const char *severityColor = "";
LogSeverity severity = msg.severity();
@@ -230,8 +232,10 @@ void LogOutput::write(const LogMessage &msg)
switch (target_) {
case LoggingTargetSyslog:
str = std::string(log_severity_name(severity)) + " "
+ msg.category().name() + " " + msg.fileInfo() + " "
+ msg.msg();
+ msg.category().name() + " " + msg.fileInfo() + " ";
if (!msg.prefix().empty())
str += msg.prefix() + ": ";
str += msg.msg();
writeSyslog(severity, str);
break;
case LoggingTargetStream:
@@ -240,8 +244,10 @@ void LogOutput::write(const LogMessage &msg)
+ std::to_string(Thread::currentId()) + "] "
+ severityColor + log_severity_name(severity) + " "
+ categoryColor + msg.category().name() + " "
+ fileColor + msg.fileInfo() + " "
+ resetColor + msg.msg();
+ fileColor + msg.fileInfo() + " ";
if (!msg.prefix().empty())
str += prefixColor + msg.prefix() + ": ";
str += resetColor + msg.msg();
writeStream(str);
break;
default:
@@ -819,14 +825,17 @@ const LogCategory &LogCategory::defaultCategory()
* will be displayed
* \param[in] severity The log message severity, controlling how the message
* will be displayed
* \param[in] prefix The log message prefix
*
* Create a log message pertaining to line \a line of file \a fileName. The
* \a severity argument sets the message severity to control whether it will be
* output or dropped.
* output or dropped. The \a prefix optionally identifies the object instance
* logging the message.
*/
LogMessage::LogMessage(const char *fileName, unsigned int line,
const LogCategory &category, LogSeverity severity)
: category_(category), severity_(severity)
const LogCategory &category, LogSeverity severity,
const std::string &prefix)
: category_(category), severity_(severity), prefix_(prefix)
{
init(fileName, line);
}
@@ -915,6 +924,12 @@ LogMessage::~LogMessage()
* \return The file info of the message
*/
/**
* \fn LogMessage::prefix()
* \brief Retrieve the prefix of the log message
* \return The prefix of the message
*/
/**
* \fn LogMessage::msg()
* \brief Retrieve the message text of the log message
@@ -962,12 +977,9 @@ Loggable::~Loggable()
LogMessage Loggable::_log(const LogCategory *category, LogSeverity severity,
const char *fileName, unsigned int line) const
{
LogMessage msg(fileName, line,
category ? *category : LogCategory::defaultCategory(),
severity);
msg.stream() << logPrefix() << ": ";
return msg;
return LogMessage(fileName, line,
category ? *category : LogCategory::defaultCategory(),
severity, logPrefix());
}
/**