<Loggers>
...
<AsyncLogger name="com.mulesoft.connectors.mqtt3" level="TRACE"/>
...
</Loggers>
Troubleshooting MQTT Connector
To troubleshoot Anypoint Connector for MQTT (MQTT Connector), become familiar with the information about enabling verbose logging and interpreting commonly thrown messages.
Enable Verbose Logging
To enable verbose logging on the connector, you need to activate logging for the connector and for the Eclipse Paho driver.
Enable Verbose Logging for MQTT Connector
To enable verbose logging in the configuration file:
-
Access Anypoint Studio and navigate to the Package Explorer view.
-
Open your application’s project name.
-
Open the
src/main/resources
path folder. -
Open the
log4j2.xml
file inside the folder. -
Add an
<AsyncLogger>
tag inside the<Loggers>
tag: -
Save your application changes.
-
Click the project name in Package Explorer and then click Run > Run As > Mule Application.
Enable Verbose Logging for Eclipse Paho Driver
Eclipse Paho, the underlying driver for MQTT Connector uses Java Util Logging. If you want to see the driver’s log messages in the application’s log file, follow the next steps to provide your application with the latest log4j-jul-2.xx.x.jar
version:
-
Identify the
log4j
core module version by checking the version suffix in the file name oflog4j-core-2.xx.x.jar
in{MULE_HOME}/lib/boot
.For an embedded Mule runtime engine (Mule), find the folder that is similar to
{AnypointStudio Folder}/Contents/Eclipse/plugins/org.mule.tooling.server.4.3.0.ee_7.3.5.202005112043/mule/lib/boot
-
Download the same version of
log4j-jul-2.xx.x.jar
from the public Maven repository, for example, for Mule 4.3.0, it’slog4j-jul-2.13.1.jar
. -
Put the
log4j-jul-2.xx.x.jar
into{MULE_HOME}/lib/boot
. -
In the Mule app, add the corresponding
java.util.logging
category as per the logging level mapping documented on the Apache Logging Services site, for example:`<AsyncLogger name="org.eclipse.paho.client.mqttv3.logging.JSR47Logger" level="ALL"/>`
For the
level
attribute, you must provide a Java Util Logging Level. Check the Apache Logging Services conversion table of Java Util Logging levels and its equivalent Log4j levels for further details.
Enable Verbose Logging for Mosquitto Broker
Each broker has different mechanisms to configure logging. To set up a Mosquitto broker and configure logging levels, follow these steps:
-
Set up a Mosquitto broker by using the official Docker image. To do so, run the following command:
docker run -it -p 1883:1883 \
-v /your/local/path/mosquitto.log:/mosquitto/mosquitto.log \
-v /your/local/path/mosquitto.conf:/mosquitto/config/mosquitto.conf eclipse-mosquitto
By using this command, you supply the log file mosquitto.log
and the configuration file mosquitto.conf
.
-
The
mosquitto.log
is a file for the broker to write log messages to. -
The
mosquitto.conf
is the broker configuration file.
-
Set the desired log level in the
mosquitto.conf
configuration file, for example:# Unencrypted MQTT over TCP # for listener at port 1883 listener 1883 allow_anonymous true # ================================================================= # Logging # ================================================================= # Route log messages to log file log_dest file /mosquitto/mosquitto.log # Types of messages to log. Use multiple log_type lines for logging # multiple types of messages. log_type debug log_type error log_type warning log_type notice log_type information
In the first two lines of the previous file you set up a listener in port 1883, with no authentication credentials required.
In the logging section you specify that the logs should be written to the mosquitto.log
file that you mounted, and that you want the broker to log messages of all levels.
You can add different listeners with different configurations, depending on what you need to test, for example:
per_listener_settings true
# Unencrypted MQTT over TCP
listener 1883
allow_anonymous true
# Unencrypted MQTT over TCP
listener 1884
password_file /mosquitto/config/mosquitto.passwd
listener 8080
protocol websockets
allow_anonymous true
In the previous file you configured 3 separate listeners:
-
On port 1883 you specified an endpoint that allows anonymous connections over MQTT.
-
On port 1884 you specified a password file where the broker expects to find the usernames and passwords for authentication.
-
On port 8080 you specified that you will admit websockets connections.
To set each individual listener with separate configurations you must first set the per_listener_settings true
.
Understand Common Throws
Here is a list of common throw messages and how to interpret them:
-
MQTT3:CONNECTIVITY
The client became disconnected from the broker while attempting to publish a message.
-
MQTT3:INVALID_TOPIC
The topic is invalid because, for example, the name is too short, too long, or contains invalid characters.
-
MQTT3:PERSISTENCE
When publishing a message, an error occurred while reading or writing persistent data for reliable messaging.
-
MQTT3:PUBLISH
An error occurred while attempting to publish a message.
-
MQTT3:RETRY_EXHAUSTED
All reconnection attempts failed.
-
MQTT3:WRITE_TIMEOUT
An error occurred when the client timed out waiting to write messages to the server.