From 626857b20a273d29ad7d09dbf066c7295c183f84 Mon Sep 17 00:00:00 2001 From: "Roger A. Light" Date: Thu, 5 Feb 2015 22:44:38 +0000 Subject: [PATCH] Close and reopen log_dest file on HUP. --- src/conf.c | 5 ----- src/logging.c | 25 +++++++++++++++++++------ src/loop.c | 3 ++- src/mosquitto.c | 4 ++-- src/mosquitto_broker.h | 4 ++-- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/conf.c b/src/conf.c index bad57a18..3e892cbb 100644 --- a/src/conf.c +++ b/src/conf.c @@ -1304,11 +1304,6 @@ int _config_read_file_core(struct mqtt3_config *config, bool reload, const char _mosquitto_log_printf(NULL, MOSQ_LOG_ERR, "Error: Out of memory"); return MOSQ_ERR_NOMEM; } - config->log_fptr = _mosquitto_fopen(config->log_file, "at"); - if(!config->log_fptr){ - _mosquitto_log_printf(NULL, MOSQ_LOG_ERR, "Error: Unable to open log file %s for writing.", config->log_file); - return MOSQ_ERR_INVAL; - } }else{ _mosquitto_log_printf(NULL, MOSQ_LOG_ERR, "Error: Empty \"log_dest file\" value in configuration."); return MOSQ_ERR_INVAL; diff --git a/src/logging.c b/src/logging.c index fc3fec9b..b6045c17 100644 --- a/src/logging.c +++ b/src/logging.c @@ -27,6 +27,7 @@ Contributors: #include #include +#include extern struct mosquitto_db int_db; @@ -49,25 +50,32 @@ HANDLE syslog_h; static int log_destinations = MQTT3_LOG_STDERR; static int log_priorities = MOSQ_LOG_ERR | MOSQ_LOG_WARNING | MOSQ_LOG_NOTICE | MOSQ_LOG_INFO; -int mqtt3_log_init(int priorities, int destinations, int facility) +int mqtt3_log_init(struct mqtt3_config *config) { int rc = 0; - log_priorities = priorities; - log_destinations = destinations; + log_priorities = config->log_type; + log_destinations = config->log_dest; if(log_destinations & MQTT3_LOG_SYSLOG){ #ifndef WIN32 - openlog("mosquitto", LOG_PID|LOG_CONS, facility); + openlog("mosquitto", LOG_PID|LOG_CONS, config->log_facility); #else syslog_h = OpenEventLog(NULL, "mosquitto"); #endif } + if(log_destinations & MQTT3_LOG_FILE){ + config->log_fptr = _mosquitto_fopen(config->log_file, "at"); + if(!config->log_fptr){ + _mosquitto_log_printf(NULL, MOSQ_LOG_ERR, "Error: Unable to open log file %s for writing.", config->log_file); + return MOSQ_ERR_INVAL; + } + } return rc; } -int mqtt3_log_close(void) +int mqtt3_log_close(struct mqtt3_config *config) { if(log_destinations & MQTT3_LOG_SYSLOG){ #ifndef WIN32 @@ -76,8 +84,13 @@ int mqtt3_log_close(void) CloseEventLog(syslog_h); #endif } - /* FIXME - do something for all destinations! */ + if(log_destinations & MQTT3_LOG_FILE){ + if(config->log_fptr){ + fclose(config->log_fptr); + } + } + /* FIXME - do something for all destinations! */ return MOSQ_ERR_SUCCESS; } diff --git a/src/loop.c b/src/loop.c index 2cc09bbe..e937e937 100644 --- a/src/loop.c +++ b/src/loop.c @@ -326,7 +326,8 @@ int mosquitto_main_loop(struct mosquitto_db *db, int *listensock, int listensock mosquitto_security_cleanup(db, true); mosquitto_security_init(db, true); mosquitto_security_apply(db); - mqtt3_log_init(db->config->log_type, db->config->log_dest, db->config->log_facility); + mqtt3_log_close(db->config); + mqtt3_log_init(db->config); flag_reload = false; } if(flag_tree_print){ diff --git a/src/mosquitto.c b/src/mosquitto.c index 6ece6b70..07465e09 100644 --- a/src/mosquitto.c +++ b/src/mosquitto.c @@ -237,7 +237,7 @@ int main(int argc, char *argv[]) /* Initialise logging only after initialising the database in case we're * logging to topics */ - mqtt3_log_init(config.log_type, config.log_dest, config.log_facility); + mqtt3_log_init(&config); _mosquitto_log_printf(NULL, MOSQ_LOG_INFO, "mosquitto version %s (build date %s) starting", VERSION, TIMESTAMP); if(config.config_file){ _mosquitto_log_printf(NULL, MOSQ_LOG_INFO, "Config loaded from %s.", config.config_file); @@ -332,7 +332,7 @@ int main(int argc, char *argv[]) rc = mosquitto_main_loop(&int_db, listensock, listensock_count, listener_max); _mosquitto_log_printf(NULL, MOSQ_LOG_INFO, "mosquitto version %s terminating", VERSION); - mqtt3_log_close(); + mqtt3_log_close(&config); #ifdef WITH_PERSISTENCE if(config.persistence){ diff --git a/src/mosquitto_broker.h b/src/mosquitto_broker.h index a673a2e4..8bce5a83 100644 --- a/src/mosquitto_broker.h +++ b/src/mosquitto_broker.h @@ -427,8 +427,8 @@ void mosquitto__free_disused_contexts(struct mosquitto_db *db); /* ============================================================ * Logging functions * ============================================================ */ -int mqtt3_log_init(int level, int destinations, int facility); -int mqtt3_log_close(void); +int mqtt3_log_init(struct mqtt3_config *config); +int mqtt3_log_close(struct mqtt3_config *config); int _mosquitto_log_printf(struct mosquitto *mosq, int level, const char *fmt, ...) __attribute__((format(printf, 3, 4))); /* ============================================================