From: Michael Tremer Date: Thu, 1 Jul 2021 12:24:16 +0000 (+0000) Subject: logging: Log to journald when available X-Git-Tag: 0.9.28~1135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68c90f46f8bbc85fd3fbb0589ff52fc62e6dbbaa;p=pakfire.git logging: Log to journald when available Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/logging.c b/src/libpakfire/logging.c index cbc559db5..75182ffa6 100644 --- a/src/libpakfire/logging.c +++ b/src/libpakfire/logging.c @@ -18,12 +18,19 @@ # # #############################################################################*/ +#include #include #include -#include +#include #include +#ifdef HAVE_SYSTEMD +#include +#else +#include +#endif + PAKFIRE_EXPORT void pakfire_log_stderr(void* data, int priority, const char* file, int line, const char* fn, const char* format, va_list args) { fprintf(stderr, "pakfire: "); @@ -35,8 +42,50 @@ PAKFIRE_EXPORT void pakfire_log_stderr(void* data, int priority, const char* fil vfprintf(stderr, format, args); } +#ifdef HAVE_SYSTEMD + +PAKFIRE_EXPORT void pakfire_log_syslog(void* data, int priority, const char* file, + int line, const char* fn, const char* format, va_list args) { + + char* buffer = NULL; + int r; + + // Format log message + r = vasprintf(&buffer, format, args); + if (r < 0) + return; + + // Send message to journald + r = sd_journal_send( + "MESSAGE=%s", buffer, + "PRIORITY=%d", priority, + + // Syslog compat + "SYSLOG_IDENTIFIER=pakfire", + + // Debugging stuff + "ERRNO=%d", errno, + "CODE_FILE=%s", file, + "CODE_LINE=%d", line, + "CODE_FUNC=%s", fn, + + NULL + ); + + // Fall back to standard output + if (r) + sd_journal_perror(buffer); + + // Cleanup + free(buffer); +} + +#else /* HAVE_SYSTEMD */ + PAKFIRE_EXPORT void pakfire_log_syslog(void* data, int priority, const char* file, int line, const char* fn, const char* format, va_list args) { openlog("pakfire", LOG_PID, LOG_DAEMON); vsyslog(priority | LOG_DAEMON, format, args); } + +#endif /* HAVE_SYSTEMD */