summaryrefslogtreecommitdiffstats
path: root/common/console_common.c
diff options
context:
space:
mode:
authorEugen Wiens <eugen.wiens@jumo.net>2018-02-21 09:26:38 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2018-02-22 08:47:39 +0100
commita019f725ab48536a4bb93ec2dea319d9fc5206c5 (patch)
tree21af6421f29e0305f7f04a16e3b215d6719dd6d7 /common/console_common.c
parent7e879bd678fa1ac8b1b0bd4e7b9c845b0e967da2 (diff)
downloadbarebox-a019f725ab48536a4bb93ec2dea319d9fc5206c5.tar.gz
console: added colored print out of log levels
When the system is booting the warnings and errors are not be quickly discovered. With this improvement the errors are colored red, the warnings yellow and the notices blue. Signed-off-by: Eugen Wiens <eugen.wiens@jumo.net> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common/console_common.c')
-rw-r--r--common/console_common.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/common/console_common.c b/common/console_common.c
index 0202345..00e020b 100644
--- a/common/console_common.c
+++ b/common/console_common.c
@@ -33,6 +33,15 @@
#ifndef CONFIG_CONSOLE_NONE
+static const char *colored_log_level[] = {
+ [MSG_EMERG] = "\033[31mEMERG:\033[0m ", /* red */
+ [MSG_ALERT] = "\033[31mALERT:\033[0m ", /* red */
+ [MSG_CRIT] = "\033[31mCRITICAL:\033[0m ", /* red */
+ [MSG_ERR] = "\033[31mERROR:\033[0m ", /* red */
+ [MSG_WARNING] = "\033[33mWARNING:\033[0m ", /* yellow */
+ [MSG_NOTICE] = "\033[34mNOTICE:\033[0m ", /* blue */
+};
+
int barebox_loglevel = CONFIG_DEFAULT_LOGLEVEL;
LIST_HEAD(barebox_logbuf);
@@ -102,6 +111,18 @@ nolog:
puts(str);
}
+static void print_colored_log_level(const int level)
+{
+ if (!console_allow_color())
+ return;
+ if (level >= ARRAY_SIZE(colored_log_level))
+ return;
+ if (!colored_log_level[level])
+ return;
+
+ pr_puts(level, colored_log_level[level]);
+}
+
int pr_print(int level, const char *fmt, ...)
{
va_list args;
@@ -111,6 +132,8 @@ int pr_print(int level, const char *fmt, ...)
if (!IS_ENABLED(CONFIG_LOGBUF) && level > barebox_loglevel)
return 0;
+ print_colored_log_level(level);
+
va_start(args, fmt);
i = vsprintf(printbuffer, fmt, args);
va_end(args);
@@ -129,6 +152,8 @@ int dev_printf(int level, const struct device_d *dev, const char *format, ...)
if (!IS_ENABLED(CONFIG_LOGBUF) && level > barebox_loglevel)
return 0;
+ print_colored_log_level(level);
+
if (dev->driver && dev->driver->name)
ret += sprintf(printbuffer, "%s ", dev->driver->name);