@Test public void testShortLineNumber() { final String[] options = { "short.lineNumber" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.newInstance(null, options); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final StackTraceElement top = parent.getStackTrace()[0]; final int expectedLineNumber = top.getLineNumber(); 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("The line numbers should be same", expectedLineNumber == Integer.parseInt(result)); }
@Override public void format(LogEvent event, StringBuilder buffer) { if (event.getThrown() != null) { buffer.append(this.options.getSeparator()); super.format(event, buffer); buffer.append(this.options.getSeparator()); } }
/** * {@inheritDoc} */ @Override public void format(final LogEvent event, final StringBuilder buffer) { final Throwable t = event.getThrown(); if (isSubShortOption()) { formatSubShortOption(t, getSuffix(event), buffer); } else if (t != null && options.anyLines()) { formatOption(t, getSuffix(event), buffer); } }
/** * TODO: Needs better a better exception? NumberFormatException is NOT helpful. */ @Test(expected = Exception.class) public void testBadShortOption() { final String[] options = { "short.UNKNOWN" }; ThrowablePatternConverter.newInstance(null, options); }
/** * Gets an instance of the class. * * * @param config * @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 ThrowablePatternConverter newInstance(final Configuration config, final String[] options) { return new ThrowablePatternConverter("Throwable", "throwable", options, config); }
if ((throwable != null || proxy != null) && options.anyLines()) { if (proxy == null) { super.format(event, toAppendTo); return;
@Test public void testShortFileName() { final String[] options = { "short.fileName" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.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(); assertEquals("The file names should be same", "ThrowablePatternConverterTest.java", result); }
if (throwable != null && options.anyLines()) { if (proxy == null) { super.format(event, toAppendTo); return;
@Test public void testShortMessage() { final String[] options = { "short.message" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.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(); assertEquals("The messages should be same", "IllegalArgument", result); }
@Test public void testShortMethodName() { final String[] options = { "short.methodName" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.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(); assertEquals("The method names should be same", "testShortMethodName", result); }
@Test public void testShortClassName() { final String packageName = "org.apache.logging.log4j.core.pattern."; final String[] options = { "short.className" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.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(); assertEquals("The class names should be same", packageName + "ThrowablePatternConverterTest", result); }
@Test public void testShortOptionWithSuffix() { final String packageName = "org.apache.logging.log4j.core.pattern."; final String[] options = { "short.className", "suffix(test suffix)" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.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("Each line should end with suffix", everyLineEndsWith(result, "test suffix")); }
@Test public void testFullWithSuffix() { final String[] options = { "full", "suffix(test suffix)" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.newInstance(null, options); Throwable parent; try { try { throw new NullPointerException("null pointer"); } catch (final NullPointerException e) { throw new IllegalArgumentException("IllegalArgument", e); } } catch (final IllegalArgumentException e) { parent = e; } 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("Each line of full stack trace should end with the specified suffix", everyLineEndsWith(result, "test suffix")); }
@Test public void testShortLocalizedMessage() { final String[] options = { "short.localizedMessage" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.newInstance(null, options); final Throwable parent = new LocalizedException(); 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(); assertEquals("The messages should be same", "I am localized.", result); }
@Test public void testFull() { final String[] options = { "full" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.newInstance(null, options); Throwable parent; try { try { throw new NullPointerException("null pointer"); } catch (final NullPointerException e) { throw new IllegalArgumentException("IllegalArgument", e); } } catch (final IllegalArgumentException e) { parent = e; } 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(); // System.out.print(result); assertTrue("Incorrect start of msg", result.startsWith("java.lang.IllegalArgumentException: IllegalArgument")); assertTrue("Missing nested exception", result.contains("java.lang.NullPointerException: null pointer")); }
private void createStackTraceEvent(final JSONObject logstashEvent, final LogEvent loggingEvent) { if (loggingEvent.getThrown().getStackTrace() != null) { final String[] options = { "full" }; final ThrowablePatternConverter converter = ThrowablePatternConverter.newInstance(options); final StringBuilder sb = new StringBuilder(); converter.format(loggingEvent, sb); final String stackTrace = sb.toString(); logstashEvent.put(LayoutFields.STACK_TRACE, stackTrace); } } }