Skip to content

Commit

Permalink
log_console: Add pretty print
Browse files Browse the repository at this point in the history
This introduces alternative output of mod log header.
Log mod module was printed:
  mod=0
now it is displayed this way:
  [DEFAULT]
Log level used to be:
  level=2
Now it is:
  [WRN]
of nothing if color are requested

Time stamp is not displayed by default if CONSOLE_TICKS is 1

Severity level can be printed in color.

Additional syscfg values that can be used:
LOG_CONSOLE_PRETTY enable alternative display
LOG_CONSOLE_PRETTY_WITH_COLORS enables colors for severity level
LOG_CONSOLE_PRETTY_WITH_TIMESTAMP enables/disables time stamp printing

Signed-off-by: Jerzy Kasenberg <jerzy.kasenberg@codecoup.pl>
  • Loading branch information
kasjer committed Apr 15, 2024
1 parent a8fe8a3 commit 12383a1
Show file tree
Hide file tree
Showing 2 changed files with 104 additions and 0 deletions.
85 changes: 85 additions & 0 deletions sys/log/full/src/log_console.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,90 @@ log_console_get(void)
return &log_console;
}

#if MYNEWT_VAL(LOG_CONSOLE_PRETTY)
#define CSI "\x1b["
#define COLOR_BLUE "36m"
#define COLOR_YELLOW "33m"
#define COLOR_RED "31m"
#define COLOR_RED_BG "41m"

#if MYNEWT_VAL(LOG_CONSOLE_PRETTY_WITH_COLORS)
#define COLOR_DBG CSI COLOR_BLUE
#define COLOR_INF ""
#define COLOR_WRN CSI COLOR_YELLOW
#define COLOR_ERR CSI COLOR_RED
#define COLOR_CRI CSI COLOR_RED_BG
#define COLOR_RESET CSI "0m"
#else
#define COLOR_DBG ""
#define COLOR_INF ""
#define COLOR_WRN ""
#define COLOR_ERR ""
#define COLOR_CRI ""
#define COLOR_RESET ""
#endif

static const char * const log_level_color[] = {
COLOR_DBG,
COLOR_INF,
COLOR_WRN,
COLOR_ERR,
COLOR_CRI,
};

static const char * const log_level_str[] = {
"[DBG]",
"[INF]",
"[WRN]",
"[ERR]",
"[CRI]",
};

static void
log_console_print_hdr(const struct log_entry_hdr *hdr)
{
char module_num[10];
char image_hash_str[17];
char level_str_buf[13];
const char *level_str = "";
const char *module_name = NULL;
const char *color = "";
const char *color_off = "";

/* Find module defined in syscfg.logcfg sections */
module_name = log_module_get_name(hdr->ue_module);

if (module_name == NULL) {
module_name = module_num;
sprintf(module_num, "mod=%u", hdr->ue_module);
}
if (hdr->ue_flags & LOG_FLAGS_IMG_HASH) {
sprintf(image_hash_str, "[ih=0x%02x%02x%02x%02x]", hdr->ue_imghash[0], hdr->ue_imghash[1],
hdr->ue_imghash[2], hdr->ue_imghash[3]);
} else {
image_hash_str[0] = 0;
}
if (hdr->ue_level <= LOG_LEVEL_CRITICAL) {
if (MYNEWT_VAL(LOG_CONSOLE_PRETTY_WITH_COLORS)) {
color = log_level_color[hdr->ue_level];
color_off = COLOR_RESET;
} else {
level_str = log_level_str[hdr->ue_level];
}
} else {
sprintf(level_str_buf, "[level=%u]", hdr->ue_level);
}

if (MYNEWT_VAL(LOG_CONSOLE_PRETTY_WITH_TIMESTAMP)) {
unsigned int us = (unsigned int)hdr->ue_ts % 1000000;
unsigned int s = (unsigned int)(hdr->ue_ts / 1000000);
console_printf("[%u.%06u][%s%7s%s]%s%s ", s, us, color, module_name, color_off, level_str, image_hash_str);
} else {
console_printf("[%s%7s%s]%s%s ", color, module_name, color_off, level_str, image_hash_str);
}
}

#else
static void
log_console_print_hdr(const struct log_entry_hdr *hdr)
{
Expand All @@ -62,6 +146,7 @@ log_console_print_hdr(const struct log_entry_hdr *hdr)
}
console_printf("]");
}
#endif

static int
log_console_append_body(struct log *log, const struct log_entry_hdr *hdr,
Expand Down
19 changes: 19 additions & 0 deletions sys/log/full/syscfg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,22 @@ syscfg.defs:
description: 'Limits what level log messages are compiled in.'
value: 0

LOG_CONSOLE_PRETTY:
description: >
Use alternative formatting of mod log prints.
value: 0

LOG_CONSOLE_PRETTY_WITH_COLORS:
description: >
Use color for mod log levels.
value: 0

LOG_CONSOLE_PRETTY_WITH_TIMESTAMP:
description: >
Print timestamp in us.
Turned off by default when CONSOLE_TICKS is on.
value: 1

LOG_FLAGS_IMAGE_HASH:
description: >
Enable logging of the first 4 bytes of the image hash. 0 - disable;
Expand Down Expand Up @@ -155,5 +171,8 @@ syscfg.defs:
the global index to be sequentially increasing for persisted logs.
value: 0

syscfg.vals.CONSOLE_TICKS:
LOG_CONSOLE_PRETTY_WITH_TIMESTAMP: 0

syscfg.vals.LOG_NEWTMGR:
LOG_MGMT: MYNEWT_VAL(LOG_MGMT)

0 comments on commit 12383a1

Please sign in to comment.