From 1d2d1272cf5c3160ca42bfd586096325c8007e24 Mon Sep 17 00:00:00 2001 From: Davin McCall Date: Tue, 20 Mar 2018 18:28:40 +0000 Subject: [PATCH] Make "syslog" formatting of main log entries optional. --- src/dinit-log.cc | 36 ++++++++++++++++++++++++------------ src/dinit.cc | 2 +- src/includes/dinit-log.h | 2 +- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/dinit-log.cc b/src/dinit-log.cc index 723fd67..a6f3a98 100644 --- a/src/dinit-log.cc +++ b/src/dinit-log.cc @@ -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 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 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 ("") 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++) { diff --git a/src/dinit.cc b/src/dinit.cc index 9ae6f8e..b8232e5 100644 --- a/src/dinit.cc +++ b/src/dinit.cc @@ -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()); diff --git a/src/includes/dinit-log.h b/src/includes/dinit-log.h index 7a0c26f..93b1159 100644 --- a/src/includes/dinit-log.h +++ b/src/includes/dinit-log.h @@ -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; -- 2.25.1