chiark / gitweb /
log: add new log output mode, that prints to console, but prefixes with syslog priority
authorLennart Poettering <lennart@poettering.net>
Thu, 22 Jan 2015 02:47:46 +0000 (03:47 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 22 Jan 2015 03:02:07 +0000 (04:02 +0100)
This is useful when we execute our own programs, reading output from its
STDERR, and want to retain priority information.

src/shared/log.c
src/shared/log.h

index af1a932c86e9e37971c821f2e30b07d9a7481171..f8c16de777c242da5841f290f0ee927a4751defd 100644 (file)
@@ -314,14 +314,19 @@ static int write_to_console(
                 const char *object,
                 const char *buffer) {
 
                 const char *object,
                 const char *buffer) {
 
-        char location[64];
-        struct iovec iovec[5] = {};
+        char location[64], prefix[1 + DECIMAL_STR_MAX(int) + 2];
+        struct iovec iovec[6] = {};
         unsigned n = 0;
         bool highlight;
 
         if (console_fd < 0)
                 return 0;
 
         unsigned n = 0;
         bool highlight;
 
         if (console_fd < 0)
                 return 0;
 
+        if (log_target == LOG_TARGET_CONSOLE_PREFIXED) {
+                sprintf(prefix, "<%i>", level);
+                IOVEC_SET_STRING(iovec[n++], prefix);
+        }
+
         highlight = LOG_PRI(level) <= LOG_ERR && show_color;
 
         if (show_location) {
         highlight = LOG_PRI(level) <= LOG_ERR && show_color;
 
         if (show_location) {
@@ -1016,7 +1021,8 @@ int log_show_location_from_string(const char *e) {
 }
 
 bool log_on_console(void) {
 }
 
 bool log_on_console(void) {
-        if (log_target == LOG_TARGET_CONSOLE)
+        if (log_target == LOG_TARGET_CONSOLE ||
+            log_target == LOG_TARGET_CONSOLE_PREFIXED)
                 return true;
 
         return syslog_fd < 0 && kmsg_fd < 0 && journal_fd < 0;
                 return true;
 
         return syslog_fd < 0 && kmsg_fd < 0 && journal_fd < 0;
@@ -1024,6 +1030,7 @@ bool log_on_console(void) {
 
 static const char *const log_target_table[_LOG_TARGET_MAX] = {
         [LOG_TARGET_CONSOLE] = "console",
 
 static const char *const log_target_table[_LOG_TARGET_MAX] = {
         [LOG_TARGET_CONSOLE] = "console",
+        [LOG_TARGET_CONSOLE_PREFIXED] = "console-prefixed",
         [LOG_TARGET_KMSG] = "kmsg",
         [LOG_TARGET_JOURNAL] = "journal",
         [LOG_TARGET_JOURNAL_OR_KMSG] = "journal-or-kmsg",
         [LOG_TARGET_KMSG] = "kmsg",
         [LOG_TARGET_JOURNAL] = "journal",
         [LOG_TARGET_JOURNAL_OR_KMSG] = "journal-or-kmsg",
index d15d7c8f92b848c63e80ddea4987da2ce941d98d..2889e1e77fcd65cfd31526001db2c2f80e22f536 100644 (file)
@@ -34,6 +34,7 @@
 
 typedef enum LogTarget{
         LOG_TARGET_CONSOLE,
 
 typedef enum LogTarget{
         LOG_TARGET_CONSOLE,
+        LOG_TARGET_CONSOLE_PREFIXED,
         LOG_TARGET_KMSG,
         LOG_TARGET_JOURNAL,
         LOG_TARGET_JOURNAL_OR_KMSG,
         LOG_TARGET_KMSG,
         LOG_TARGET_JOURNAL,
         LOG_TARGET_JOURNAL_OR_KMSG,