The simplest way to log exception thrown within a mule flow is to use the mule expression langauge with the Logger component
<logger level="ERROR" doc:name="Logger" message="#[exception.causeException]"/>
However, this only logs the message from the root cause. Sometimes, I need to log the full stack trace in debug. (Or at error level if it’s only developers reading the application log). To do this, mule provides a class called ExceptionUtils. For example,
<logger level="ERROR" doc:name="Logger" message="#[org.mule.util.ExceptionUtils.getFullStackTrace(exception)]"/>
Classes implementing the Callable interface can also access any exception thrown using the exception payload. I had to do this in an application I was working on because I needed to save any error messages in the database request buffer for audit purposes.
@Component("UpdateDB") public class UpdateDB implements Callable { @Override public Object onCall(MuleEventContext muleContext) throws Exception { ExceptionPayload exceptionPayload = muleContext.getMessage().getExceptionPayload(); String errorMessage = exceptionPayload.getRootException().getMessage(); return null; } }