Make "syslog" formatting of main log entries optional.
authorDavin McCall <davmac@davmac.org>
Tue, 20 Mar 2018 18:28:40 +0000 (18:28 +0000)
committerDavin McCall <davmac@davmac.org>
Tue, 20 Mar 2018 18:58:03 +0000 (18:58 +0000)
src/dinit-log.cc
src/dinit.cc
src/includes/dinit-log.h

index 723fd676075c68bab6132ad41738d81a8d3df130..a6f3a981aa22863bd1078d52024685aec086f777 100644 (file)
@@ -29,6 +29,7 @@ extern eventloop_t event_loop;
 
 static bool log_current_line[2];  // Whether the current line is being logged (for console, main log)
 loglevel_t log_level[2] = { loglevel_t::WARN, loglevel_t::INFO };
+static bool log_format_syslog[2] = { false, true };
 
 static service_set *services = nullptr;  // Reference to service set
 
@@ -260,10 +261,11 @@ void init_log(service_set *sset)
 
 // Set up the main log to output to the given file descriptor.
 // Potentially throws std::bad_alloc or std::system_error
-void setup_main_log(int fd)
+void setup_main_log(int fd, bool syslog_format)
 {
     log_stream[DLOG_MAIN].init(fd);
     log_stream[DLOG_MAIN].add_watch(event_loop, fd, dasynq::OUT_EVENTS);
+    log_format_syslog[DLOG_MAIN] = syslog_format;
 }
 
 bool is_log_flushed() noexcept
@@ -357,10 +359,14 @@ template <typename ... T> static void do_log(loglevel_t lvl, bool to_cons, T ...
     push_to_log(DLOG_CONS, args...);
     
     if (log_current_line[DLOG_MAIN]) {
-        char svcbuf[10];
-        snprintf(svcbuf, 10, "<%d>", LOG_DAEMON | log_level_to_syslog_level(lvl));
-        
-        push_to_log(DLOG_MAIN, svcbuf, args...);
+        if (log_format_syslog[DLOG_MAIN]) {
+            char svcbuf[10];
+            snprintf(svcbuf, 10, "<%d>", LOG_DAEMON | log_level_to_syslog_level(lvl));
+            push_to_log(DLOG_MAIN, svcbuf, args...);
+        }
+        else {
+            push_to_log(DLOG_MAIN, args...);
+        }
     }
 }
 
@@ -377,10 +383,14 @@ template <typename ... T> static void do_log_main(T ... args) noexcept
     log_current_line[DLOG_CONS] = false;
     log_current_line[DLOG_MAIN] = true;
     
-    char svcbuf[10];
-    snprintf(svcbuf, 10, "<%d>", LOG_DAEMON | LOG_NOTICE);
-    
-    push_to_log(DLOG_MAIN, svcbuf, args...);
+    if (log_format_syslog[DLOG_MAIN]) {
+        char svcbuf[10];
+        snprintf(svcbuf, 10, "<%d>", LOG_DAEMON | LOG_NOTICE);
+        push_to_log(DLOG_MAIN, svcbuf, args...);
+    }
+    else {
+        push_to_log(DLOG_MAIN, args...);
+    }
 }
 
 // Log a message. A newline will be appended.
@@ -426,9 +436,11 @@ void log_msg_begin(loglevel_t lvl, const char *msg) noexcept
 
     // Prepend the syslog priority level string ("<N>") for the main log:
     if (log_current_line[DLOG_MAIN]) {
-        char svcbuf[10];
-        snprintf(svcbuf, 10, "<%d>", LOG_DAEMON | log_level_to_syslog_level(lvl));
-        do_log_part(DLOG_MAIN, svcbuf);
+        if (log_format_syslog[DLOG_MAIN]) {
+            char svcbuf[10];
+            snprintf(svcbuf, 10, "<%d>", LOG_DAEMON | log_level_to_syslog_level(lvl));
+            do_log_part(DLOG_MAIN, svcbuf);
+        }
     }
 
     for (int i = 0; i < 2; i++) {
index 9ae6f8e1cad96c376b86dfd33324a7b23440501b..b8232e59508891092af44eadd3bb25fbfc91ef4b 100644 (file)
@@ -666,7 +666,7 @@ void setup_external_log() noexcept
             // the file descriptor so we will be notified when it's ready. In other words we can
             // basically use it anyway.
             try {
-                setup_main_log(sockfd);
+                setup_main_log(sockfd, true);
             }
             catch (std::exception &e) {
                 log(loglevel_t::ERROR, "Setting up log failed: ", e.what());
index 7a0c26fde11f5a8f7f06b1717c9ee338dd847196..93b11596bf41d8c0c9e597dc077a6300532a92cd 100644 (file)
@@ -29,7 +29,7 @@ enum class loglevel_t {
 extern loglevel_t log_level[2];
 void enable_console_log(bool do_enable) noexcept;
 void init_log(service_set *sset);
-void setup_main_log(int fd);
+void setup_main_log(int fd, bool syslog_format);
 bool is_log_flushed() noexcept;
 void discard_console_log_buffer() noexcept;