This is because each converter in the pattern, but not their child converters, are checked if they are instanceof ThrowableHandlingConverter, and the "%replace" converter has the "%exception" converter as a child. See https://github.com/qos-ch/logback/blob/7ee74ad132bf74ead68c5bb553f5353aa2588bb0/logback-classic/src/main/java/ch/qos/logback/classic/pattern/EnsureExceptionHandling.java#L69 A simple workaround is to add "%nopex" to your pattern. On another note, i strongly recommend against generating JSON with a pattern like this. If e.g. your message or exception message contains a quote, your JSON will be invalid. I recommend instead using something like https://github.com/logstash/logstash-logback-encoder |