diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/basic/log.c | 13 | ||||
-rw-r--r-- | src/basic/terminal-util.c | 30 | ||||
-rw-r--r-- | src/basic/terminal-util.h | 3 | ||||
-rw-r--r-- | src/shared/logs-show.c | 17 |
4 files changed, 42 insertions, 21 deletions
diff --git a/src/basic/log.c b/src/basic/log.c index ea252c4130..a81c350ab4 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -336,7 +336,7 @@ static int write_to_console( char location[256], prefix[1 + DECIMAL_STR_MAX(int) + 2]; struct iovec iovec[6] = {}; - bool highlight; + const char *on = NULL, *off = NULL; size_t n = 0; if (console_fd < 0) @@ -347,18 +347,19 @@ static int write_to_console( iovec[n++] = IOVEC_MAKE_STRING(prefix); } - highlight = LOG_PRI(level) <= LOG_ERR && show_color; + if (show_color) + get_log_colors(LOG_PRI(level), &on, &off, NULL); if (show_location) { (void) snprintf(location, sizeof location, "(%s:%i) ", file, line); iovec[n++] = IOVEC_MAKE_STRING(location); } - if (highlight) - iovec[n++] = IOVEC_MAKE_STRING(ANSI_HIGHLIGHT_RED); + if (on) + iovec[n++] = IOVEC_MAKE_STRING(on); iovec[n++] = IOVEC_MAKE_STRING(buffer); - if (highlight) - iovec[n++] = IOVEC_MAKE_STRING(ANSI_NORMAL); + if (off) + iovec[n++] = IOVEC_MAKE_STRING(off); iovec[n++] = IOVEC_MAKE_STRING("\n"); if (writev(console_fd, iovec, n) < 0) { diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index b692c52e59..4676ce2a80 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -1310,3 +1310,33 @@ int vt_release(int fd, bool restore) { return 0; } + +void get_log_colors(int priority, const char **on, const char **off, const char **highlight) { + /* Note that this will initialize output variables only when there's something to output. + * The caller must pre-initalize to "" or NULL as appropriate. */ + + if (priority <= LOG_ERR) { + if (on) + *on = ANSI_HIGHLIGHT_RED; + if (off) + *off = ANSI_NORMAL; + if (highlight) + *highlight = ANSI_HIGHLIGHT; + + } else if (priority <= LOG_NOTICE) { + if (on) + *on = ANSI_HIGHLIGHT; + if (off) + *off = ANSI_NORMAL; + if (highlight) + *highlight = ANSI_HIGHLIGHT_RED; + + } else if (priority >= LOG_DEBUG) { + if (on) + *on = ANSI_GREY; + if (off) + *off = ANSI_NORMAL; + if (highlight) + *highlight = ANSI_HIGHLIGHT_RED; + } +} diff --git a/src/basic/terminal-util.h b/src/basic/terminal-util.h index c885e0a2d1..f3e785e7ba 100644 --- a/src/basic/terminal-util.h +++ b/src/basic/terminal-util.h @@ -4,6 +4,7 @@ #include <stdarg.h> #include <stdbool.h> #include <stdio.h> +#include <syslog.h> #include <sys/types.h> #include "macro.h" @@ -158,3 +159,5 @@ int vt_default_utf8(void); int vt_reset_keyboard(int fd); int vt_restore(int fd); int vt_release(int fd, bool restore_vt); + +void get_log_colors(int priority, const char **on, const char **off, const char **highlight); diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c index 5fb736f633..bdde6c11e3 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -163,21 +163,8 @@ static bool print_multiline( bool ellipsized = false; int line = 0; - if (flags & OUTPUT_COLOR) { - if (priority <= LOG_ERR) { - color_on = ANSI_HIGHLIGHT_RED; - color_off = ANSI_NORMAL; - highlight_on = ANSI_HIGHLIGHT; - } else if (priority <= LOG_NOTICE) { - color_on = ANSI_HIGHLIGHT; - color_off = ANSI_NORMAL; - highlight_on = ANSI_HIGHLIGHT_RED; - } else if (priority >= LOG_DEBUG) { - color_on = ANSI_GREY; - color_off = ANSI_NORMAL; - highlight_on = ANSI_HIGHLIGHT_RED; - } - } + if (flags & OUTPUT_COLOR) + get_log_colors(priority, &color_on, &color_off, &highlight_on); /* A special case: make sure that we print a newline when the message is empty. */ |