package io.dropwizard.logging;

import ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter;
import ch.qos.logback.classic.spi.IThrowableProxy;

import java.util.regex.Pattern;

import static io.dropwizard.logging.PrefixedThrowableProxyConverter.PATTERN;
import static io.dropwizard.logging.PrefixedThrowableProxyConverter.PREFIX;

A RootCauseFirstThrowableProxyConverter that prefixes stack traces with !.
/** * A {@link RootCauseFirstThrowableProxyConverter} that prefixes stack traces with {@code !}. */
public class PrefixedRootCauseFirstThrowableProxyConverter extends RootCauseFirstThrowableProxyConverter { private static final String CAUSING = PREFIX + "Causing:"; private static final Pattern CAUSING_PATTERN = Pattern.compile("^" + Pattern.quote(PREFIX) + "Wrapped by:", Pattern.MULTILINE); @Override protected String throwableProxyToString(IThrowableProxy tp) { final String prefixed = PATTERN.matcher(super.throwableProxyToString(tp)).replaceAll(PREFIX); return CAUSING_PATTERN.matcher(prefixed).replaceAll(CAUSING); } }