Troubleshooting MQTT Connector | MuleSoft Documentation
# 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:
  1. Access Anypoint Studio and navigate to the **Package Explorer** view.
  2. Open your application’s project name.
  3. Open the `src/main/resources` path folder.
  4. Open the `log4j2.xml` file inside the folder.
  5. Add an `<AsyncLogger>` tag inside the `<Loggers>` tag:
```
			<Loggers>
				...
				<AsyncLogger name="com.mulesoft.connectors.mqtt3" level="TRACE"/>
				...
			</Loggers>
```

  6. Save your application changes.
  7. 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:
  1. Identify the `log4j` core module version by checking the version suffix in the file name of `log4j-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`
  2. Download the same version of `log4j-jul-2.xx.x.jar` from the public Maven repository, for example, for Mule 4.3.0, it’s `log4j-jul-2.13.1.jar`.
  3. Put the `log4j-jul-2.xx.x.jar` into `{MULE_HOME}/lib/boot`.
  4. 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:
  1. 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.


  2. 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.
```



## See Also
  * MuleSoft Help Center
  *