From 60ad8c10161d3276ef25727bb77f8afc5c9ecfb7 Mon Sep 17 00:00:00 2001 From: nobounce Date: Tue, 29 Aug 2023 13:51:16 +0200 Subject: [PATCH] Log: Allow direct logging to journald if ENABLE_JOURNALD is set This allows for more metadata in the journal over syslog, like automatic line and source file information being logged --- Makefile | 13 +++++++++++-- src/btop_log.cpp | 11 +++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index eb191b25d..69c9ddb4c 100644 --- a/Makefile +++ b/Makefile @@ -156,8 +156,17 @@ else LTO := $(THREADS) endif -#? Look for syslog.h -override ADDFLAGS += $(strip $(shell echo "#include \nint main() {}" | $(CXX) -o /dev/null -x c++ - >/dev/null 2>&1 && echo "-DHAVE_SYSLOG")) +#? Enable journald direct logging +ifeq ($(ENABLE_JOURNALD),true) + HAVE_JOURNALD := $(shell echo "#include \nint main() {}" | $(CXX) -lsystemd -o /dev/null -x c++ - >/dev/null 2>&1 && echo true) +endif + +ifeq ($(HAVE_JOURNALD),true) + override ADDFLAGS += -DHAVE_JOURNALD -lsystemd +else + #? Look for syslog.h + override ADDFLAGS += $(strip $(shell echo '#include \nint main() {}' | $(CXX) -o /dev/null -x c++ - >/dev/null 2>&1 && echo '-DHAVE_SYSLOG')) +endif #? The Directories, Source, Includes, Objects and Binary SRCDIR := src diff --git a/src/btop_log.cpp b/src/btop_log.cpp index 426f29642..437f63654 100644 --- a/src/btop_log.cpp +++ b/src/btop_log.cpp @@ -7,7 +7,9 @@ #include #include -#if defined(HAVE_SYSLOG) +#if defined(HAVE_JOURNALD) + #include +#elif defined(HAVE_SYSLOG) #include #endif @@ -54,7 +56,7 @@ namespace Logger { atomic_lock lck(busy, true); lose_priv neutered{}; -#if defined(HAVE_SYSLOG) +#if defined(HAVE_JOURNALD) || defined(HAVE_SYSLOG) int status = LOG_DEBUG; switch (level) { case 1: status = LOG_ERR; break; @@ -62,6 +64,11 @@ namespace Logger { case 3: status = LOG_INFO; break; case 4: status = LOG_DEBUG; break; } +#endif + +#if defined(HAVE_JOURNALD) + sd_journal_print(status, msg.data()); +#elif defined(HAVE_SYSLOG) syslog(status, msg.data()); #else if (logfile.empty()) {