From c50781a2b7d0ab56acb31b8f79df2e69f9f74b8b Mon Sep 17 00:00:00 2001 From: Maxim Biro Date: Thu, 31 Dec 2015 01:24:31 -0500 Subject: [PATCH] Make logger a global object instead of an instance Passing Logger object into every function isn't fun. See for yourself: something as simple as a public key printing function turns from >void print_public_key(const uint8_t *public_key) to >void print_public_key(Logger *logger, const uint8_t *public_key) --- .../bootstrap_daemon/src/{logger.c => log.c} | 41 ++++++++++--------- .../bootstrap_daemon/src/{logger.h => log.h} | 32 +++++++-------- 2 files changed, 37 insertions(+), 36 deletions(-) rename other/bootstrap_daemon/src/{logger.c => log.c} (80%) rename other/bootstrap_daemon/src/{logger.h => log.h} (68%) diff --git a/other/bootstrap_daemon/src/logger.c b/other/bootstrap_daemon/src/log.c similarity index 80% rename from other/bootstrap_daemon/src/logger.c rename to other/bootstrap_daemon/src/log.c index 3cf18fd6..dff2dbad 100644 --- a/other/bootstrap_daemon/src/logger.c +++ b/other/bootstrap_daemon/src/log.c @@ -21,7 +21,7 @@ * */ -#include "logger.h" +#include "log.h" #include "global.h" @@ -30,34 +30,36 @@ #include #include -typedef struct Logger { - LOGGER_BACKEND backend; -} Logger; +LOGGER_BACKEND current_backend = -1; -Logger* new_logger(LOGGER_BACKEND backend) +bool open_log(LOGGER_BACKEND backend) { + if (current_backend != -1) { + return false; + } + if (backend == LOGGER_BACKEND_SYSLOG) { openlog(DAEMON_NAME, LOG_NOWAIT | LOG_PID, LOG_DAEMON); } - Logger* logger = malloc(sizeof(Logger)); + current_backend = backend; - if (logger == NULL) { - return NULL; - } - - logger->backend = backend; - - return logger; + return true; } -void kill_logger(Logger* logger) +bool close_log() { - if (backend == LOGGER_BACKEND_SYSLOG) { + if (current_backend == -1) { + return false; + } + + if (current_backend == LOGGER_BACKEND_SYSLOG) { closelog(); } - free(logger); + current_backend = -1; + + return true; } int level_syslog(LOG_LEVEL level) @@ -85,7 +87,6 @@ FILE* level_stdout(LOG_LEVEL level) case LOG_LEVEL_WARNING: // intentional fallthrough case LOG_LEVEL_ERROR: return stderr; - } } @@ -94,12 +95,12 @@ void log_stdout(LOG_LEVEL level, const char *format, va_list args) vfprintf(level_stdout(level), format, args); } -void log(Logger* logger, LOG_LEVEL level, const char *format, ...) +bool log(LOG_LEVEL level, const char *format, ...) { va_list args; va_start(args, format); - switch (logger->backend) { + switch (current_backend) { case LOGGER_BACKEND_SYSLOG: log_syslog(level, format, args); break; @@ -109,4 +110,6 @@ void log(Logger* logger, LOG_LEVEL level, const char *format, ...) } va_end(args); + + return current_backend != -1; } diff --git a/other/bootstrap_daemon/src/logger.h b/other/bootstrap_daemon/src/log.h similarity index 68% rename from other/bootstrap_daemon/src/logger.h rename to other/bootstrap_daemon/src/log.h index 174d3445..7e5dce99 100644 --- a/other/bootstrap_daemon/src/logger.h +++ b/other/bootstrap_daemon/src/log.h @@ -1,4 +1,4 @@ -/* logger.h +/* log.h * * Tox DHT bootstrap daemon. * @@ -21,8 +21,8 @@ * */ -#ifndef LOGGER_H -#define LOGGER_H +#ifndef LOG_H +#define LOG_H typedef enum LOGGER_BACKEND { LOGGER_BACKEND_SYSLOG, @@ -35,29 +35,27 @@ typedef enum LOG_LEVEL { LOG_LEVEL_ERROR } LOG_LEVEL; -typedef struct Logger Logger; +/** + * Initializes logger. + * @param backend Specifies which backend to use. + * @return true on success, flase if log is already opened. + */ +bool open_log(LOGGER_BACKEND backend); /** - * Creates new logger. - * @param backend Specifies which backend the logger should use. - * @return Logger object on success, NULL on failure. + * Releases all used resources by the logger. + * @return true on success, flase if log is already closed. */ -Logger* new_logger(LOGGER_BACKEND backend); - -/** - * Destroys a logger object, releasing all used resources. - * @param logger Logger object to destroy. - */ -void kill_logger(Logger* logger); +bool close_log(); /** * Logs a message. - * @param logger Logger object to use. * @param level Log level to use. * @param format printf-like format string. * @param ... Zero or more arguments, similar to printf function. + * @return true on success, flase if log is closed. */ -void log(Logger* logger, LOG_LEVEL level, const char *format, ...); +bool log(LOG_LEVEL level, const char *format, ...); -#endif // LOGGER_H +#endif // LOG_H