]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
journald-console: Add colors when forwarding to console 26849/head
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 16 Mar 2023 10:22:58 +0000 (11:22 +0100)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Thu, 16 Mar 2023 10:22:58 +0000 (11:22 +0100)
Let's color output when we're forwarding to the console. To make this
work, we inherit TERM from pid 1 and use it to decide whether we should
output colors or not.

src/journal/journald-console.c
units/systemd-journald.service.in

index c8a3e18360f208e802eb53c69fe2d92353d39ef4..8595ba3e453ba420a2c46afd4d9f8aaf0e2dd362 100644 (file)
@@ -38,13 +38,13 @@ void server_forward_console(
                 const char *message,
                 const struct ucred *ucred) {
 
-        struct iovec iovec[5];
+        struct iovec iovec[7];
         struct timespec ts;
         char tbuf[STRLEN("[] ") + DECIMAL_STR_MAX(ts.tv_sec) + DECIMAL_STR_MAX(ts.tv_nsec)-3 + 1];
         char header_pid[STRLEN("[]: ") + DECIMAL_STR_MAX(pid_t)];
         _cleanup_free_ char *ident_buf = NULL;
         _cleanup_close_ int fd = -EBADF;
-        const char *tty;
+        const char *tty, *color_on = "", *color_off = "";
         int n = 0;
 
         assert(s);
@@ -81,8 +81,12 @@ void server_forward_console(
                 iovec[n++] = IOVEC_MAKE_STRING(": ");
         }
 
+        get_log_colors(LOG_PRI(priority), &color_on, &color_off, NULL);
+
         /* Fourth: message */
+        iovec[n++] = IOVEC_MAKE_STRING(color_on);
         iovec[n++] = IOVEC_MAKE_STRING(message);
+        iovec[n++] = IOVEC_MAKE_STRING(color_off);
         iovec[n++] = IOVEC_MAKE_STRING("\n");
 
         tty = s->tty_path ?: "/dev/console";
index ece872c77097f178ac3a383f9f8e165fd817dc90..79ec60c937b3ba735459ff649f4f9053fd9b70d6 100644 (file)
@@ -47,6 +47,7 @@ SystemCallArchitectures=native
 SystemCallErrorNumber=EPERM
 SystemCallFilter=@system-service
 Type=notify
+PassEnvironment=TERM
 {{SERVICE_WATCHDOG}}
 
 # In case you're wondering why CAP_SYS_PTRACE is needed, access to