diff --git a/src/libcamera/base/log.cpp b/src/libcamera/base/log.cpp
index 64813b6607c5..aceec7302549 100644
--- a/src/libcamera/base/log.cpp
+++ b/src/libcamera/base/log.cpp
@@ -96,6 +96,23 @@ static const char *log_severity_name(LogSeverity severity)
 		return "UNKWN";
 }
 
+static const std::string &log_severity_emojis(LogSeverity severity)
+{
+	static const std::string emojis[] = {
+		"🪲 ", // DEBUG
+		"ℹ️ ", // INFO
+		"⚠️ ", // WARNING
+		"🔥 ", // ERROR
+		"🆘 ", // FATAL
+		"🤔 ", // Unknown
+	};
+
+	if (static_cast<unsigned int>(severity) < std::size(emojis))
+		return emojis[severity];
+	else
+		return emojis[std::size(emojis) - 1];
+}
+
 /**
  * \brief Log output
  *
@@ -194,7 +211,6 @@ void LogOutput::write(const LogMessage &msg)
 		    + msg.msg();
 		writeSyslog(msg.severity(), str);
 		break;
-	case LoggingTargetStream:
 	case LoggingTargetFile:
 		str = "[" + utils::time_point_to_string(msg.timestamp()) + "] ["
 		    + std::to_string(Thread::currentId()) + "] "
@@ -203,6 +219,13 @@ void LogOutput::write(const LogMessage &msg)
 		    + msg.msg();
 		writeStream(str);
 		break;
+	case LoggingTargetStream:
+		str = "[" + utils::time_point_to_string(msg.timestamp()) + "] ["
+		    + std::to_string(Thread::currentId()) + "] "
+		    + log_severity_emojis(msg.severity()) + " "
+		    + msg.category().name() + " " + msg.fileInfo() + " "
+		    + msg.msg();
+		writeStream(str);
 	default:
 		break;
 	}
