private ExtendedWhitespaceThrowablePatternConverter(Configuration configuration, String[] options) { super("WhitespaceExtendedThrowable", "throwable", options, configuration); this.delegate = ExtendedThrowablePatternConverter.newInstance(configuration, options); }
@Override public void format(LogEvent event, StringBuilder buffer) { if (event.getThrown() != null) { buffer.append(this.options.getSeparator()); this.delegate.format(event, buffer); buffer.append(this.options.getSeparator()); } }
@Test public void testFull() { final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, null); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final LogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("testLogger") // .setLoggerFqcn(this.getClass().getName()) // .setLevel(Level.DEBUG) // .setMessage(new SimpleMessage("test exception")) // .setThrown(parent).build(); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final StringWriter sw = new StringWriter(); final PrintWriter pw = new PrintWriter(sw); parent.printStackTrace(pw); String result = sb.toString(); result = result.replaceAll(" ~?\\[.*\\]", Strings.EMPTY); final String expected = sw.toString(); //.replaceAll("\r", Strings.EMPTY); assertEquals(expected, result); }
@Test public void testFiltersAndSeparator() { final ExtendedThrowablePatternConverter exConverter = ExtendedThrowablePatternConverter.newInstance(null, new String[] { "full", "filters(org.junit,org.eclipse)", "separator(|)" }); final ThrowableFormatOptions options = exConverter.getOptions(); final List<String> ignorePackages = options.getIgnorePackages(); assertNotNull(ignorePackages); final String ignorePackagesString = ignorePackages.toString(); assertTrue(ignorePackagesString, ignorePackages.contains("org.junit")); assertTrue(ignorePackagesString, ignorePackages.contains("org.eclipse")); assertEquals("|", options.getSeparator()); }
@Test public void testExceptionWithFilters() { final List<PatternFormatter> formatters = parser .parse("%d{DEFAULT} - %msg - %xEx{full}{filters(org.junit,org.eclipse)}%n"); assertNotNull(formatters); assertEquals(6, formatters.size()); final PatternFormatter patternFormatter = formatters.get(4); final LogEventPatternConverter converter = patternFormatter.getConverter(); assertEquals(ExtendedThrowablePatternConverter.class, converter.getClass()); final ExtendedThrowablePatternConverter exConverter = (ExtendedThrowablePatternConverter) converter; final ThrowableFormatOptions options = exConverter.getOptions(); assertTrue(options.getIgnorePackages().contains("org.junit")); assertTrue(options.getIgnorePackages().contains("org.eclipse")); assertEquals(System.lineSeparator(), options.getSeparator()); }
/** * Gets an instance of the class. * * @param config The current Configuration. * @param options pattern options, may be null. If first element is "short", * only the first line of the throwable will be formatted. * @return instance of class. */ public static ExtendedThrowablePatternConverter newInstance(final Configuration config, final String[] options) { return new ExtendedThrowablePatternConverter(config, options); }
return; final String suffix = getSuffix(event); final String extStackTrace = proxy.getExtendedStackTraceAsString(options.getIgnorePackages(), options.getTextRenderer(), suffix); final int len = toAppendTo.length();
@Test public void testSuffix() { final String suffix = "suffix(test suffix)"; final String[] options = {suffix}; final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, options); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final LogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("testLogger") // .setLoggerFqcn(this.getClass().getName()) // .setLevel(Level.DEBUG) // .setMessage(new SimpleMessage("test exception")) // .setThrown(parent).build(); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final String result = sb.toString(); assertTrue("No suffix", result.contains("test suffix")); }
@Test public void testExceptionWithFiltersAndSeparator() { final List<PatternFormatter> formatters = parser .parse("%d{DEFAULT} - %msg - %xEx{full}{filters(org.junit,org.eclipse)}{separator(|)}%n"); assertNotNull(formatters); assertEquals(6, formatters.size()); final PatternFormatter patternFormatter = formatters.get(4); final LogEventPatternConverter converter = patternFormatter.getConverter(); assertEquals(ExtendedThrowablePatternConverter.class, converter.getClass()); final ExtendedThrowablePatternConverter exConverter = (ExtendedThrowablePatternConverter) converter; final ThrowableFormatOptions options = exConverter.getOptions(); final List<String> ignorePackages = options.getIgnorePackages(); assertNotNull(ignorePackages); final String ignorePackagesString = ignorePackages.toString(); assertTrue(ignorePackagesString, ignorePackages.contains("org.junit")); assertTrue(ignorePackagesString, ignorePackages.contains("org.eclipse")); assertEquals("|", options.getSeparator()); }
@Test public void testSuffixWillIgnoreThrowablePattern() { final String suffix = "suffix(%xEx{suffix(inner suffix)})"; final String[] options = {suffix}; final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, options); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final LogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("testLogger") // .setLoggerFqcn(this.getClass().getName()) // .setLevel(Level.DEBUG) // .setMessage(new SimpleMessage("test exception")) // .setThrown(parent).build(); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final String result = sb.toString(); assertFalse("Has unexpected suffix", result.contains("inner suffix")); }
final LogEventPatternConverter pc = ExtendedThrowablePatternConverter.newInstance(config, null); list.add(new PatternFormatter(pc, FormattingInfo.getDefault()));
@Test public void testFiltering() { final String packages = "filters(org.junit, org.apache.maven, sun.reflect, java.lang.reflect)"; final String[] options = {packages}; final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, options); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final LogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("testLogger") // .setLoggerFqcn(this.getClass().getName()) // .setLevel(Level.DEBUG) // .setMessage(new SimpleMessage("test exception")) // .setThrown(parent).build(); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final String result = sb.toString(); assertTrue("No suppressed lines", result.contains(" suppressed ")); }
@Test public void testSuffixFromNormalPattern() { final String suffix = "suffix(%mdc{key})"; ThreadContext.put("key", "test suffix "); final String[] options = {suffix}; final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, options); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final LogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("testLogger") // .setLoggerFqcn(this.getClass().getName()) // .setLevel(Level.DEBUG) // .setMessage(new SimpleMessage("test exception")) // .setThrown(parent).build(); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final String result = sb.toString(); assertTrue("No suffix", result.contains("test suffix")); }
@Test public void testDeserializedLogEventWithThrowableProxyButNoThrowable() { final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null, null); final Throwable originalThrowable = new Exception("something bad happened"); final ThrowableProxy throwableProxy = new ThrowableProxy(originalThrowable); final Throwable deserializedThrowable = null; final Log4jLogEvent event = Log4jLogEvent.newBuilder() // .setLoggerName("testLogger") // .setLoggerFqcn(this.getClass().getName()) // .setLevel(Level.DEBUG) // .setMessage(new SimpleMessage("")) // .setThrown(deserializedThrowable) // .setThrownProxy(throwableProxy) // .setTimeMillis(0).build(); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final String result = sb.toString(); assertTrue(result, result.contains(originalThrowable.getMessage())); assertTrue(result, result.contains(originalThrowable.getStackTrace()[0].getMethodName())); }