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)
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) {
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;
+ }
+}
#include <stdarg.h>
#include <stdbool.h>
#include <stdio.h>
+#include <syslog.h>
#include <sys/types.h>
#include "macro.h"
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);
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. */