[libcamera-devel,5/5] libcamera: base: log: Color the log prefix
diff mbox series

Message ID 20220525222503.6460-6-laurent.pinchart@ideasonboard.com
State Accepted
Headers show
Series
  • libcamera: Add colors to the log
Related show

Commit Message

Laurent Pinchart May 25, 2022, 10:25 p.m. UTC
Add coloring to the log prefix to increase log readability.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 include/libcamera/base/log.h |  5 ++++-
 src/libcamera/base/log.cpp   | 37 +++++++++++++++++++++++-------------
 2 files changed, 28 insertions(+), 14 deletions(-)

Comments

Umang Jain May 29, 2022, 12:37 p.m. UTC | #1
Hi Laurent

On 5/26/22 00:25, Laurent Pinchart via libcamera-devel wrote:
> Add coloring to the log prefix to increase log readability.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>


Looks good,

Reviewed-by: Umang Jain <umang.jain@ideasonboard.com>

> ---
>   include/libcamera/base/log.h |  5 ++++-
>   src/libcamera/base/log.cpp   | 37 +++++++++++++++++++++++-------------
>   2 files changed, 28 insertions(+), 14 deletions(-)
>
> diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h
> index 3f065267c914..3fc5ced38a6a 100644
> --- a/include/libcamera/base/log.h
> +++ b/include/libcamera/base/log.h
> @@ -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
> diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
> index a9f5bbbd36f7..6620a50a5b6f 100644
> --- a/src/libcamera/base/log.cpp
> +++ b/src/libcamera/base/log.cpp
> @@ -219,6 +219,7 @@ void LogOutput::write(const LogMessage &msg)
>   
>   	const char *categoryColor = color_ ? kColorBrightWhite : "";
>   	const char *fileColor = color_ ? kColorBrightBlue : "";
> +	const char *prefixColor = color_ ? kColorGreen : "";
>   	const char *msgColor = color_ ? kColorReset : "";
>   	const char *severityColor = "";
>   	LogSeverity severity = msg.severity();
> @@ -234,8 +235,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:
> @@ -244,8 +247,10 @@ void LogOutput::write(const LogMessage &msg)
>   		    + std::to_string(Thread::currentId()) + "] "
>   		    + severityColor + log_severity_name(severity) + " "
>   		    + categoryColor + msg.category().name() + " "
> -		    + fileColor + msg.fileInfo() + " "
> -		    + msgColor + msg.msg();
> +		    + fileColor + msg.fileInfo() + " ";
> +		if (!msg.prefix().empty())
> +			str += prefixColor + msg.prefix() + ": ";
> +		str += msgColor + msg.msg();
>   		writeStream(str);
>   		break;
>   	default:
> @@ -823,14 +828,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);
>   }
> @@ -919,6 +927,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
> @@ -966,12 +980,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());
>   }
>   
>   /**
Nicolas Dufresne via libcamera-devel May 31, 2022, 4:52 a.m. UTC | #2
Hi Laurent,

On Thu, May 26, 2022 at 01:25:03AM +0300, Laurent Pinchart via libcamera-devel wrote:
> Add coloring to the log prefix to increase log readability.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>

> ---
>  include/libcamera/base/log.h |  5 ++++-
>  src/libcamera/base/log.cpp   | 37 +++++++++++++++++++++++-------------
>  2 files changed, 28 insertions(+), 14 deletions(-)
> 
> diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h
> index 3f065267c914..3fc5ced38a6a 100644
> --- a/include/libcamera/base/log.h
> +++ b/include/libcamera/base/log.h
> @@ -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
> diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
> index a9f5bbbd36f7..6620a50a5b6f 100644
> --- a/src/libcamera/base/log.cpp
> +++ b/src/libcamera/base/log.cpp
> @@ -219,6 +219,7 @@ void LogOutput::write(const LogMessage &msg)
>  
>  	const char *categoryColor = color_ ? kColorBrightWhite : "";
>  	const char *fileColor = color_ ? kColorBrightBlue : "";
> +	const char *prefixColor = color_ ? kColorGreen : "";
>  	const char *msgColor = color_ ? kColorReset : "";
>  	const char *severityColor = "";
>  	LogSeverity severity = msg.severity();
> @@ -234,8 +235,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:
> @@ -244,8 +247,10 @@ void LogOutput::write(const LogMessage &msg)
>  		    + std::to_string(Thread::currentId()) + "] "
>  		    + severityColor + log_severity_name(severity) + " "
>  		    + categoryColor + msg.category().name() + " "
> -		    + fileColor + msg.fileInfo() + " "
> -		    + msgColor + msg.msg();
> +		    + fileColor + msg.fileInfo() + " ";
> +		if (!msg.prefix().empty())
> +			str += prefixColor + msg.prefix() + ": ";
> +		str += msgColor + msg.msg();
>  		writeStream(str);
>  		break;
>  	default:
> @@ -823,14 +828,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);
>  }
> @@ -919,6 +927,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
> @@ -966,12 +980,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());
>  }
>  
>  /**
> -- 
> Regards,
> 
> Laurent Pinchart
>

Patch
diff mbox series

diff --git a/include/libcamera/base/log.h b/include/libcamera/base/log.h
index 3f065267c914..3fc5ced38a6a 100644
--- a/include/libcamera/base/log.h
+++ b/include/libcamera/base/log.h
@@ -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
diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
index a9f5bbbd36f7..6620a50a5b6f 100644
--- a/src/libcamera/base/log.cpp
+++ b/src/libcamera/base/log.cpp
@@ -219,6 +219,7 @@  void LogOutput::write(const LogMessage &msg)
 
 	const char *categoryColor = color_ ? kColorBrightWhite : "";
 	const char *fileColor = color_ ? kColorBrightBlue : "";
+	const char *prefixColor = color_ ? kColorGreen : "";
 	const char *msgColor = color_ ? kColorReset : "";
 	const char *severityColor = "";
 	LogSeverity severity = msg.severity();
@@ -234,8 +235,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:
@@ -244,8 +247,10 @@  void LogOutput::write(const LogMessage &msg)
 		    + std::to_string(Thread::currentId()) + "] "
 		    + severityColor + log_severity_name(severity) + " "
 		    + categoryColor + msg.category().name() + " "
-		    + fileColor + msg.fileInfo() + " "
-		    + msgColor + msg.msg();
+		    + fileColor + msg.fileInfo() + " ";
+		if (!msg.prefix().empty())
+			str += prefixColor + msg.prefix() + ": ";
+		str += msgColor + msg.msg();
 		writeStream(str);
 		break;
 	default:
@@ -823,14 +828,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);
 }
@@ -919,6 +927,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
@@ -966,12 +980,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());
 }
 
 /**