Close and reopen log_dest file on HUP.

pull/211/merge
Roger A. Light 11 years ago
parent c276fd9572
commit 626857b20a

@ -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;

@ -27,6 +27,7 @@ Contributors:
#include <mosquitto_broker.h>
#include <memory_mosq.h>
#include <util_mosq.h>
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;
}

@ -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){

@ -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){

@ -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)));
/* ============================================================

Loading…
Cancel
Save