Repository: logging-log4j2 Updated Branches: refs/heads/master b80e210f6 -> e7bbeceb1
[LOG4J2-1068] Exceptions not logged when using TcpSocketServer + SerializedLayout. Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/e7bbeceb Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/e7bbeceb Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/e7bbeceb Branch: refs/heads/master Commit: e7bbeceb123e60bc84186395e2a29c2a90769886 Parents: b80e210 Author: ggregory <[email protected]> Authored: Wed Jun 24 14:44:58 2015 -0700 Committer: ggregory <[email protected]> Committed: Wed Jun 24 14:44:58 2015 -0700 ---------------------------------------------------------------------- .../ExtendedThrowablePatternConverter.java | 2 +- .../ExtendedThrowablePatternConverterTest.java | 51 +++++++++++++------- src/changes/changes.xml | 3 ++ 3 files changed, 38 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e7bbeceb/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.java index 3897721..2357093 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverter.java @@ -64,7 +64,7 @@ public final class ExtendedThrowablePatternConverter extends ThrowablePatternCon proxy = ((Log4jLogEvent) event).getThrownProxy(); } final Throwable throwable = event.getThrown(); - if (throwable != null && options.anyLines()) { + if ((throwable != null || proxy != null) && options.anyLines()) { if (proxy == null) { super.format(event, toAppendTo); return; http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e7bbeceb/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java index 9edc98a..8d0a528 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/ExtendedThrowablePatternConverterTest.java @@ -16,53 +16,70 @@ */ package org.apache.logging.log4j.core.pattern; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + import java.io.PrintWriter; import java.io.StringWriter; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.impl.Log4jLogEvent; +import org.apache.logging.log4j.core.impl.ThrowableProxy; import org.apache.logging.log4j.message.SimpleMessage; import org.apache.logging.log4j.util.Strings; import org.junit.Test; -import static org.junit.Assert.*; - /** * */ public class ExtendedThrowablePatternConverterTest { @Test - public void testFull() { - final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null); + public void testDeserializedLogEventWithThrowableProxyButNoThrowable() { + final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null); + final Throwable originalThrowable = new Exception("something bad happened"); + final ThrowableProxy throwableProxy = new ThrowableProxy(originalThrowable); + final Throwable deserializedThrowable = null; + final LogEvent event = Log4jLogEvent.createEvent("testLogger", null, this.getClass().getName(), Level.DEBUG, + new SimpleMessage(""), deserializedThrowable, throwableProxy, null, null, null, null, 0); + 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())); + } + + @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(options); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG, new SimpleMessage("test exception"), parent); 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); + final String result = sb.toString(); + assertTrue("No suppressed lines", result.contains(" suppressed ")); } @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(options); + public void testFull() { + final ExtendedThrowablePatternConverter converter = ExtendedThrowablePatternConverter.newInstance(null); final Throwable cause = new NullPointerException("null pointer"); final Throwable parent = new IllegalArgumentException("IllegalArgument", cause); final LogEvent event = new Log4jLogEvent("testLogger", null, this.getClass().getName(), Level.DEBUG, new SimpleMessage("test exception"), parent); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); - final String result = sb.toString(); - assertTrue("No suppressed lines", result.contains(" suppressed ")); + 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); } } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e7bbeceb/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 3451f85..f4257d4 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -48,6 +48,9 @@ <action issue="LOG4J2-1051" dev="ggregory" type="fix" due-to="Lukasz Lenart"> NoClassDefFoundError when starting app on Google App Engine. </action> + <action issue="LOG4J2-1068" dev="ggregory" type="fix" due-to="Andy McMullan"> + Exceptions not logged when using TcpSocketServer + SerializedLayout. + </action> <action issue="LOG4J2-1067" dev="ggregory" type="fix" due-to="Sam Braam"> ThrowableProxy getExtendedStackTraceAsString throws NPE on deserialized nested exceptions. </action>
