[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [UNIKRAFT PATCH 3/5] lib/ukdebug: Option for colored output format
Hi Simon, This patch looks good, thanks. Reviewed-by: Felipe Huici <felipe.huici@xxxxxxxxx> On Mon, Sep 14, 2020 at 2:48 PM Simon Kuenzer <simon.kuenzer@xxxxxxxxx> wrote: > > Colors! This commit makes use of ANSI control sequences to color console > output when activated by the user configuration. > > Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> > --- > lib/ukdebug/Config.uk | 8 ++++ > lib/ukdebug/print.c | 85 +++++++++++++++++++++++++++++++++++++------ > 2 files changed, 82 insertions(+), 11 deletions(-) > > diff --git a/lib/ukdebug/Config.uk b/lib/ukdebug/Config.uk > index 799593b8..e4177bec 100644 > --- a/lib/ukdebug/Config.uk > +++ b/lib/ukdebug/Config.uk > @@ -73,6 +73,14 @@ config LIBUKDEBUG_PRINT_SRCNAME > bool "Print source code location of messages" > default y > > +config LIBUKDEBUG_ANSI_COLOR > + bool "Colored output" > + default n > + help > + Use ANSI control sequences to colorize console output. > + Before activating this option, please make sure that > + your console output/display supports ANSI. > + > config LIBUKDEBUG_ENABLE_ASSERT > bool "Enable assertions" > default y > diff --git a/lib/ukdebug/print.c b/lib/ukdebug/print.c > index 1a12898e..6dbcda06 100644 > --- a/lib/ukdebug/print.c > +++ b/lib/ukdebug/print.c > @@ -45,6 +45,44 @@ > #include <uk/errptr.h> > #include <uk/arch/lcpu.h> > > +#if CONFIG_LIBUKDEBUG_ANSI_COLOR > +#define LVLC_RESET UK_ANSI_MOD_RESET > +#define LVLC_TS UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_GREEN) > +#define LVLC_SP UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_BLUE) > +#define LVLC_LIBNAME UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_YELLOW) > +#define LVLC_SRCNAME UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_CYAN) > +#define LVLC_DEBUG UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_WHITE) > +#define LVLC_KERN UK_ANSI_MOD_BOLD \ > + UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_BLUE) > +#define LVLC_INFO UK_ANSI_MOD_BOLD \ > + UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_GREEN) > +#define LVLC_WARN UK_ANSI_MOD_BOLD \ > + UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_YELLOW) > +#define LVLC_ERROR UK_ANSI_MOD_BOLD \ > + UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_RED) > +#define LVLC_ERROR_MSG UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_RED) > +#define LVLC_CRIT UK_ANSI_MOD_BOLD \ > + UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_WHITE) \ > + UK_ANSI_MOD_COLORBG(UK_ANSI_COLOR_RED) > + > +#define LVLC_CRIT_MSG UK_ANSI_MOD_BOLD \ > + UK_ANSI_MOD_COLORFG(UK_ANSI_COLOR_RED) > +#else > +#define LVLC_RESET "" > +#define LVLC_TS "" > +#define LVLC_SP "" > +#define LVLC_LIBNAME "" > +#define LVLC_SRCNAME "" > +#define LVLC_DEBUG "" > +#define LVLC_KERN "" > +#define LVLC_INFO "" > +#define LVLC_WARN "" > +#define LVLC_ERROR "" > +#define LVLC_ERROR_MSG "" > +#define LVLC_CRIT "" > +#define LVLC_CRIT_MSG "" > +#endif /* !CONFIG_LIBUKDEBUG_ANSI_COLOR */ > + > #define BUFLEN 192 > /* special level for printk redirection, used internally only */ > #define KLVL_DEBUG (-1) > @@ -81,7 +119,8 @@ static void _print_timestamp(struct _vprint_console *cons) > __nsec rem_usec = ukarch_time_subsec(nansec); > > rem_usec = ukarch_time_nsec_to_usec(rem_usec); > - len = __uk_snprintf(buf, BUFLEN, "[%5" __PRInsec ".%06" __PRInsec "] > ", > + len = __uk_snprintf(buf, BUFLEN, LVLC_RESET LVLC_TS > + "[%5" __PRInsec ".%06" __PRInsec "] ", > sec, rem_usec); > cons->cout((char *)buf, len); > } > @@ -96,7 +135,8 @@ static void _print_stack(struct _vprint_console *cons) > > stackb = (ukarch_read_sp() & STACK_MASK_TOP) + __STACK_SIZE; > > - len = __uk_snprintf(buf, BUFLEN, "<%p> ", (void *) stackb); > + len = __uk_snprintf(buf, BUFLEN, LVLC_RESET LVLC_SP > + "<%p> ", (void *) stackb); > cons->cout((char *)buf, len); > } > #endif > @@ -113,21 +153,25 @@ static void _vprint(struct _vprint_console *cons, > const char *lptr = NULL; > const char *nlptr = NULL; > > + /* > + * Note: We reset the console colors earlier in order to exclude > + * background colors for trailing white spaces. > + */ > switch (lvl) { > case KLVL_DEBUG: > - msghdr = "dbg: "; > + msghdr = LVLC_RESET LVLC_DEBUG "dbg:" LVLC_RESET " "; > break; > case KLVL_CRIT: > - msghdr = "CRIT: "; > + msghdr = LVLC_RESET LVLC_CRIT "CRIT:" LVLC_RESET " "; > break; > case KLVL_ERR: > - msghdr = "ERR: "; > + msghdr = LVLC_RESET LVLC_ERROR "ERR:" LVLC_RESET " "; > break; > case KLVL_WARN: > - msghdr = "Warn: "; > + msghdr = LVLC_RESET LVLC_WARN "Warn:" LVLC_RESET " "; > break; > case KLVL_INFO: > - msghdr = "Info: "; > + msghdr = LVLC_RESET LVLC_INFO "Info:" LVLC_RESET " "; > break; > default: > /* unknown type: ignore */ > @@ -153,12 +197,13 @@ static void _vprint(struct _vprint_console *cons, > #if CONFIG_LIBUKDEBUG_PRINT_TIME > _print_timestamp(cons); > #endif > - cons->cout(DECONST(char *, msghdr), 6); > + cons->cout(DECONST(char *, msghdr), strlen(msghdr)); > #if CONFIG_LIBUKDEBUG_PRINT_STACK > _print_stack(cons); > #endif > if (libname) { > - cons->cout("[", 1); > + cons->cout(LVLC_RESET LVLC_LIBNAME "[", > + strlen(LVLC_RESET LVLC_LIBNAME) + > 1); > cons->cout(DECONST(char *, libname), > strlen(libname)); > cons->cout("] ", 2); > @@ -167,13 +212,15 @@ static void _vprint(struct _vprint_console *cons, > if (srcname) { > char lnobuf[6]; > > + cons->cout(LVLC_RESET LVLC_SRCNAME "<", > + strlen(LVLC_RESET LVLC_SRCNAME) + > 1); > cons->cout(DECONST(char *, srcname), > strlen(srcname)); > cons->cout(" @ ", 3); > cons->cout(lnobuf, > __uk_snprintf(lnobuf, > sizeof(lnobuf), > - "%-5u", srcline)); > - cons->cout(": ", 2); > + "%4u", srcline)); > + cons->cout("> ", 2); > } > #endif > cons->newline = 0; > @@ -186,7 +233,23 @@ static void _vprint(struct _vprint_console *cons, > } else { > llen = len; > } > + > + /* Message body */ > + switch (lvl) { > + case KLVL_CRIT: > + cons->cout(LVLC_RESET LVLC_CRIT_MSG, > + strlen(LVLC_RESET LVLC_CRIT_MSG)); > + break; > + case KLVL_ERR: > + cons->cout(LVLC_RESET LVLC_ERROR_MSG, > + strlen(LVLC_RESET LVLC_ERROR_MSG)); > + break; > + default: > + cons->cout(LVLC_RESET, strlen(LVLC_RESET)); > + } > cons->cout((char *)lptr, llen); > + cons->cout(LVLC_RESET, strlen(LVLC_RESET)); > + > len -= llen; > lptr = nlptr + 1; > } > -- > 2.20.1 > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |