From ce68c446d17d1c87dc823eba44e2da8a04db66c4 Mon Sep 17 00:00:00 2001 From: Emery Date: Sun, 11 Nov 2012 15:21:00 -0600 Subject: [PATCH] Optional systemd journal logging --- CMakeLists.txt | 15 +++++++++++++++ src/core/main.c | 6 +++++- src/util/log.c | 24 +++++++++++++++++++++++- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 40e996e..502e6ba 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,6 +19,7 @@ option(LINK_SUPPORT "Allow hub linking" OFF) option(SSL_SUPPORT "Enable SSL support" ON) option(USE_OPENSSL "Use OpenSSL's SSL support" ON ) option(SQLITE_SUPPORT "Enable SQLite support" ON) +option(SYSTEMD_SUPPORT "Enable logging to the systemd journal" OFF) option(ADC_STRESS "Enable the stress tester client" OFF) find_package(Git) @@ -34,6 +35,11 @@ if (SSL_SUPPORT) endif() endif() +if (SYSTEMD_SUPPORT) + INCLUDE(FindPkgConfig) + pkg_search_module(JOURNAL REQUIRED libsystemd-journal) +endif() + if (MSVC) add_definitions(-D_CRT_SECURE_NO_WARNINGS) endif() @@ -175,6 +181,15 @@ if(SSL_SUPPORT) endif() endif() +if (SYSTEMD_SUPPORT) + target_link_libraries(uhub ${JOURNAL_LIBRARIES}) + target_link_libraries(test ${JOURNAL_LIBRARIES}) + target_link_libraries(uhub-passwd ${JOURNAL_LIBRARIES}) + target_link_libraries(uhub-admin ${JOURNAL_LIBRARIES}) + include_directories(${JOURNAL_INCLUDE_DIRS}) + add_definitions(-DSYSTEMD) +endif() + configure_file ("${PROJECT_SOURCE_DIR}/version.h.in" "${PROJECT_SOURCE_DIR}/version.h") mark_as_advanced(FORCE CMAKE_BUILD_TYPE) diff --git a/src/core/main.c b/src/core/main.c index bb78672..4f0fb26 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -216,13 +216,17 @@ void print_usage(char* program) " -q Quiet mode - no output\n" " -f Fork to background\n" " -l Log messages to given file (default: stderr)\n" - " -L Log messages to syslog\n" " -c Specify configuration file (default: " SERVER_CONFIG ")\n" " -C Check configuration and return\n" " -s Show configuration parameters\n" " -S Show configuration parameters, but ignore defaults\n" " -h This message\n" #ifndef WIN32 +#ifdef SYSTEMD + " -L Log messages to journal\n" +#else + " -L Log messages to syslog\n" +#endif " -u Run as given user\n" " -g Run with given group permissions\n" " -p Store pid in file (process id)\n" diff --git a/src/util/log.c b/src/util/log.c index 42badb3..2d97528 100644 --- a/src/util/log.c +++ b/src/util/log.c @@ -21,7 +21,15 @@ #include #ifndef WIN32 + +#ifdef SYSTEMD +#define SD_JOURNAL_SUPPRESS_LOCATION +#include + +#else #include +#endif + static int use_syslog = 0; #endif @@ -83,7 +91,9 @@ void hub_log_initialize(const char* file, int syslog) if (syslog) { use_syslog = 1; + #ifndef SYSTEMD openlog("uhub", LOG_PID, LOG_USER); + #endif } #endif @@ -132,7 +142,9 @@ void hub_log_shutdown() if (use_syslog) { use_syslog = 0; + #ifndef SYSTEMD closelog(); + #endif } #endif } @@ -212,7 +224,12 @@ void hub_log(int log_verbosity, const char *format, ...) case log_fatal: level = LOG_CRIT; break; case log_error: level = LOG_ERR; break; case log_warning: level = LOG_WARNING; break; - case log_user: level = LOG_INFO | LOG_AUTH; break; + #ifdef SYSTEMD + case log_user: level = LOG_INFO; break; + + #else + case log_user: level = LOG_INFO | LOG_AUTH; break; + #endif case log_info: level = LOG_INFO; break; case log_debug: level = LOG_DEBUG; break; @@ -224,8 +241,13 @@ void hub_log(int log_verbosity, const char *format, ...) if (level == 0) return; + #ifdef SYSTEMD + sd_journal_print(level, "%s", logmsg); + + #else level |= (LOG_USER | LOG_DAEMON); syslog(level, "%s", logmsg); + #endif } #endif