diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c
index 15c9df4c892d90af19c850b82f6d551ddb4448df..cb9100c20726efe60163867b6dff5cd3ec88bee1 100644
--- a/src/sbbs3/sbbscon.c
+++ b/src/sbbs3/sbbscon.c
@@ -320,7 +320,7 @@ static void recycle_all()
 }
 
 #ifdef USE_MOSQUITTO
-void mqtt_message_received(struct mosquitto* mosq, void* cbdata, const struct mosquitto_message* msg)
+static void mqtt_message_received(struct mosquitto* mosq, void* cbdata, const struct mosquitto_message* msg)
 {
 	char topic[128];
 	lprintf(LOG_DEBUG, "MQTT message received (%d bytes) on %s", msg->payloadlen, msg->topic);
@@ -357,6 +357,16 @@ void mqtt_message_received(struct mosquitto* mosq, void* cbdata, const struct mo
 		return;
 	}
 }
+
+static void mqtt_log_msg(struct mosquitto* moq, void* cbdata, int level, const char* str)
+{
+	lprintf(LOG_INFO, "MQTT log_msg(%x): %s", level, str);
+}
+
+static void mqtt_disconnected(struct mosquitto* mosq , void* cbdata, int reason)
+{
+	lprintf(LOG_ERR, "MQTT broker disconnected, reason: %d", reason);
+}
 #endif
 
 #ifdef __unix__
@@ -1820,6 +1830,8 @@ int main(int argc, char** argv)
 
 #ifdef USE_MOSQUITTO
 	if(bbs_startup.mqtt.handle != NULL) {
+		mosquitto_log_callback_set(bbs_startup.mqtt_handle, mqtt_log_msg);
+		mosquitto_disconnect_callback_set(bbs_startup.mqtt_handle, mqtt_disconnected);
 		mosquitto_message_callback_set(bbs_startup.mqtt.handle, mqtt_message_received);
 		for(int i = bbs_startup.first_node; i <= bbs_startup.last_node; i++) {
 			mqtt_subscribe(&bbs_startup.mqtt, TOPIC_BBS, str, sizeof(str), "node%d/input", i);