mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
journalctl: hightlight log lines by priority
warn/notice = bright white < error = red
This commit is contained in:
parent
46b0d92225
commit
498261871d
@ -198,6 +198,21 @@ static int parse_argv(int argc, char *argv[]) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
static bool on_tty(void) {
|
||||
static int t = -1;
|
||||
|
||||
/* Note that this is invoked relatively early, before we start
|
||||
* the pager. That means the value we return reflects whether
|
||||
* we originally were started on a tty, not if we currently
|
||||
* are. But this is intended, since we want colour and so on
|
||||
* when run in our own pager. */
|
||||
|
||||
if (_unlikely_(t < 0))
|
||||
t = isatty(STDOUT_FILENO) > 0;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
static int generate_new_id128(void) {
|
||||
sd_id128_t id;
|
||||
int r;
|
||||
@ -397,6 +412,7 @@ int main(int argc, char *argv[]) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
on_tty();
|
||||
have_pager = !arg_no_pager && !arg_follow && pager_open();
|
||||
|
||||
if (arg_output == OUTPUT_JSON) {
|
||||
@ -407,8 +423,10 @@ int main(int argc, char *argv[]) {
|
||||
for (;;) {
|
||||
for (;;) {
|
||||
sd_id128_t boot_id;
|
||||
int flags = (arg_show_all*OUTPUT_SHOW_ALL |
|
||||
have_pager*OUTPUT_FULL_WIDTH);
|
||||
int flags =
|
||||
arg_show_all * OUTPUT_SHOW_ALL |
|
||||
have_pager * OUTPUT_FULL_WIDTH |
|
||||
on_tty() * OUTPUT_COLOR;
|
||||
|
||||
if (need_seek) {
|
||||
r = sd_journal_next(j);
|
||||
|
@ -82,13 +82,21 @@ static int output_short(sd_journal *j, unsigned line, unsigned n_columns,
|
||||
const void *data;
|
||||
size_t length;
|
||||
size_t n = 0;
|
||||
char *hostname = NULL, *identifier = NULL, *comm = NULL, *pid = NULL, *fake_pid = NULL, *message = NULL, *realtime = NULL, *monotonic = NULL;
|
||||
size_t hostname_len = 0, identifier_len = 0, comm_len = 0, pid_len = 0, fake_pid_len = 0, message_len = 0, realtime_len = 0, monotonic_len = 0;
|
||||
char *hostname = NULL, *identifier = NULL, *comm = NULL, *pid = NULL, *fake_pid = NULL, *message = NULL, *realtime = NULL, *monotonic = NULL, *priority = NULL;
|
||||
size_t hostname_len = 0, identifier_len = 0, comm_len = 0, pid_len = 0, fake_pid_len = 0, message_len = 0, realtime_len = 0, monotonic_len = 0, priority_len = 0;
|
||||
int p = LOG_INFO;
|
||||
const char *color_on = "", *color_off = "";
|
||||
|
||||
assert(j);
|
||||
|
||||
SD_JOURNAL_FOREACH_DATA(j, data, length) {
|
||||
|
||||
r = parse_field(data, length, "PRIORITY=", &priority, &priority_len);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
else if (r > 0)
|
||||
continue;
|
||||
|
||||
r = parse_field(data, length, "_HOSTNAME=", &hostname, &hostname_len);
|
||||
if (r < 0)
|
||||
goto finish;
|
||||
@ -141,6 +149,9 @@ static int output_short(sd_journal *j, unsigned line, unsigned n_columns,
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (priority_len == 1 && *priority >= '0' && *priority <= '7')
|
||||
p = *priority - '0';
|
||||
|
||||
if (flags & OUTPUT_MONOTONIC_MODE) {
|
||||
uint64_t t;
|
||||
sd_id128_t boot_id;
|
||||
@ -219,23 +230,33 @@ static int output_short(sd_journal *j, unsigned line, unsigned n_columns,
|
||||
n += fake_pid_len + 2;
|
||||
}
|
||||
|
||||
if (flags & OUTPUT_COLOR) {
|
||||
if (p <= LOG_ERR) {
|
||||
color_on = ANSI_HIGHLIGHT_RED_ON;
|
||||
color_off = ANSI_HIGHLIGHT_OFF;
|
||||
} else if (p <= LOG_NOTICE) {
|
||||
color_on = ANSI_HIGHLIGHT_ON;
|
||||
color_off = ANSI_HIGHLIGHT_OFF;
|
||||
}
|
||||
}
|
||||
|
||||
if (flags & OUTPUT_SHOW_ALL)
|
||||
printf(": %.*s\n", (int) message_len, message);
|
||||
printf(": %s%.*s%s\n", color_on, (int) message_len, message, color_off);
|
||||
else if (!utf8_is_printable_n(message, message_len)) {
|
||||
char bytes[FORMAT_BYTES_MAX];
|
||||
printf(": [%s blob data]\n", format_bytes(bytes, sizeof(bytes), message_len));
|
||||
} else if ((flags & OUTPUT_FULL_WIDTH) ||
|
||||
(message_len + n < n_columns))
|
||||
printf(": %.*s\n", (int) message_len, message);
|
||||
printf(": %s%.*s%s\n", color_on, (int) message_len, message, color_off);
|
||||
else if (n < n_columns && n_columns - n - 2 >= 3) {
|
||||
char *e;
|
||||
|
||||
e = ellipsize_mem(message, message_len, n_columns - n - 2, 90);
|
||||
|
||||
if (!e)
|
||||
printf(": %.*s\n", (int) message_len, message);
|
||||
printf(": %s%.*s%s\n", color_on, (int) message_len, message, color_off);
|
||||
else
|
||||
printf(": %s\n", e);
|
||||
printf(": %s%s%s\n", color_on, e, color_off);
|
||||
|
||||
free(e);
|
||||
} else
|
||||
|
@ -44,6 +44,7 @@ typedef enum OutputFlags {
|
||||
OUTPUT_FOLLOW = 1 << 2,
|
||||
OUTPUT_WARN_CUTOFF = 1 << 3,
|
||||
OUTPUT_FULL_WIDTH = 1 << 4,
|
||||
OUTPUT_COLOR = 1 << 5
|
||||
} OutputFlags;
|
||||
|
||||
int output_journal(sd_journal *j, OutputMode mode, unsigned line,
|
||||
|
@ -2584,9 +2584,12 @@ static void print_status_info(UnitStatusInfo *i) {
|
||||
}
|
||||
|
||||
if (i->id && arg_transport != TRANSPORT_SSH) {
|
||||
int flags = (arg_lines*OUTPUT_SHOW_ALL |
|
||||
int flags =
|
||||
arg_lines * OUTPUT_SHOW_ALL |
|
||||
arg_follow * OUTPUT_FOLLOW |
|
||||
!arg_quiet*OUTPUT_WARN_CUTOFF);
|
||||
!arg_quiet * OUTPUT_WARN_CUTOFF |
|
||||
on_tty() * OUTPUT_COLOR;
|
||||
|
||||
printf("\n");
|
||||
show_journal_by_unit(i->id, arg_output, 0,
|
||||
i->inactive_exit_timestamp_monotonic,
|
||||
|
Loading…
Reference in New Issue
Block a user