
This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "Logback: the generic, reliable, fast and flexible logging framework.". The branch, master has been updated via 9e59ee9e868c51467530824e2f06431234a48477 (commit) via fc93571b93062ee4087940abc1f376de42aed9e4 (commit) via 9d864bcdc7fae385e4184fa4ceaf114e26718f9b (commit) via 71f69c3dc42ce286ab9c8c93385f0801bdb1791f (commit) via 245fd65da02ab5a82cb66ae388e56450889eee6f (commit) via 9931dfeb2af2e7f629056758772f44c39a43fe99 (commit) via 6860c6f5a7e844f213acb222d4c13f5583734cac (commit) from 525e3196ee203d2fafe4535a29374dacf7ca90e1 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=9e59ee9e868c51467530824e2... http://github.com/ceki/logback/commit/9e59ee9e868c51467530824e2f06431234a484... commit 9e59ee9e868c51467530824e2f06431234a48477 Merge: 525e319 fc93571 Author: Ceki Gulcu <ceki@qos.ch> Date: Tue Nov 8 18:19:42 2011 +0100 Merge branch 'master' of github.com:ceki/logback http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=fc93571b93062ee4087940abc... http://github.com/ceki/logback/commit/fc93571b93062ee4087940abc1f376de42aed9... commit fc93571b93062ee4087940abc1f376de42aed9e4 Merge: cc3ed1a 9d864bc Author: Jörn Huxhorn <jhuxhorn@googlemail.com> Date: Tue Nov 8 07:44:40 2011 -0800 Merge pull request #33 from ceki/suppressed Suppressed support in ThrowableProxyUtil. Updated according to Cekis suggestions. http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=9d864bcdc7fae385e4184fa4c... http://github.com/ceki/logback/commit/9d864bcdc7fae385e4184fa4ceaf114e26718f... commit 9d864bcdc7fae385e4184fa4ceaf114e26718f9b Author: Joern Huxhorn <jhuxhorn@googlemail.com> Date: Tue Nov 8 16:38:52 2011 +0100 Added constants for magic values and deprecated unused subjoinSTEPArray method. diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java b/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java index 67c3b1b..b89457e 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java @@ -23,6 +23,9 @@ import ch.qos.logback.core.CoreConstants; */ public class ThrowableProxyUtil { + public static final int REGULAR_EXCEPTION_INDENT = 1; + public static final int SUPPRESSED_EXCEPTION_INDENT = 2; + public static void build(ThrowableProxy nestedTP, Throwable nestedThrowable, ThrowableProxy parentTP) { @@ -75,7 +78,7 @@ public class ThrowableProxyUtil { public static String asString(IThrowableProxy tp) { StringBuilder sb = new StringBuilder(); - recursiveAppend(sb, null, 1, tp); + recursiveAppend(sb, null, REGULAR_EXCEPTION_INDENT, tp); return sb.toString(); } @@ -89,10 +92,10 @@ public class ThrowableProxyUtil { IThrowableProxy[] suppressed = tp.getSuppressed(); if(suppressed != null) { for(IThrowableProxy current : suppressed) { - recursiveAppend(sb, CoreConstants.SUPPRESSED, 2, current); + recursiveAppend(sb, CoreConstants.SUPPRESSED, SUPPRESSED_EXCEPTION_INDENT, current); } } - recursiveAppend(sb, CoreConstants.CAUSED_BY, 1, tp.getCause()); + recursiveAppend(sb, CoreConstants.CAUSED_BY, REGULAR_EXCEPTION_INDENT, tp.getCause()); } private static void subjoinFirstLine(StringBuilder buf, String prefix, IThrowableProxy tp) { @@ -123,11 +126,21 @@ public class ThrowableProxyUtil { subjoinPackagingData(sb, step); } - // not called anymore - but it is public + /** + * @param sb The StringBuilder the STEPs are appended to. + * @param tp the IThrowableProxy containing the STEPs. + * @deprecated Use subjoinSTEPArray(StringBuilder sb, int indentLevel, IThrowableProxy tp) instead. + */ public static void subjoinSTEPArray(StringBuilder sb, IThrowableProxy tp) { - subjoinSTEPArray(sb, 1, tp); + // not called anymore - but it is public + subjoinSTEPArray(sb, REGULAR_EXCEPTION_INDENT, tp); } + /** + * @param sb The StringBuilder the STEPs are appended to. + * @param indentLevel indentation level used for the STEPs, usually either REGULAR_EXCEPTION_INDENT or SUPPRESSED_EXCEPTION_INDENT. + * @param tp the IThrowableProxy containing the STEPs. + */ private static void subjoinSTEPArray(StringBuilder sb, int indentLevel, IThrowableProxy tp) { StackTraceElementProxy[] stepArray = tp.getStackTraceElementProxyArray(); int commonFrames = tp.getCommonFrames(); http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=71f69c3dc42ce286ab9c8c933... http://github.com/ceki/logback/commit/71f69c3dc42ce286ab9c8c93385f0801bdb179... commit 71f69c3dc42ce286ab9c8c93385f0801bdb1791f Author: Joern Huxhorn <jhuxhorn@googlemail.com> Date: Sat Nov 5 03:53:34 2011 +0100 Added suppressed-support to asString Also added two tests that are only executed if running on Java 7. diff --git a/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java b/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java index 8d76786..67c3b1b 100644 --- a/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java +++ b/logback-classic/src/main/java/ch/qos/logback/classic/spi/ThrowableProxyUtil.java @@ -23,7 +23,7 @@ import ch.qos.logback.core.CoreConstants; */ public class ThrowableProxyUtil { - static public void build(ThrowableProxy nestedTP, Throwable nestedThrowable, + public static void build(ThrowableProxy nestedTP, Throwable nestedThrowable, ThrowableProxy parentTP) { StackTraceElement[] nestedSTE = nestedThrowable.getStackTrace(); @@ -72,18 +72,36 @@ public class ThrowableProxyUtil { return count; } - static public String asString(IThrowableProxy tp) { + public static String asString(IThrowableProxy tp) { StringBuilder sb = new StringBuilder(); - while (tp != null) { - subjoinFirstLine(sb, tp); - sb.append(CoreConstants.LINE_SEPARATOR); - subjoinSTEPArray(sb, tp); - tp = tp.getCause(); - } + recursiveAppend(sb, null, 1, tp); + return sb.toString(); } + private static void recursiveAppend(StringBuilder sb, String prefix, int indent, IThrowableProxy tp) { + if(tp == null) + return; + subjoinFirstLine(sb, prefix, tp); + sb.append(CoreConstants.LINE_SEPARATOR); + subjoinSTEPArray(sb, indent, tp); + IThrowableProxy[] suppressed = tp.getSuppressed(); + if(suppressed != null) { + for(IThrowableProxy current : suppressed) { + recursiveAppend(sb, CoreConstants.SUPPRESSED, 2, current); + } + } + recursiveAppend(sb, CoreConstants.CAUSED_BY, 1, tp.getCause()); + } + + private static void subjoinFirstLine(StringBuilder buf, String prefix, IThrowableProxy tp) { + if (prefix != null) { + buf.append(prefix); + } + subjoinExceptionMessage(buf, tp); + } + public static void subjoinPackagingData(StringBuilder builder, StackTraceElementProxy step) { if (step != null) { ClassPackagingData cpd = step.getClassPackagingData(); @@ -100,30 +118,40 @@ public class ThrowableProxyUtil { } } - static public void subjoinSTEP(StringBuilder sb, StackTraceElementProxy step) { + public static void subjoinSTEP(StringBuilder sb, StackTraceElementProxy step) { sb.append(step.toString()); subjoinPackagingData(sb, step); } - - static public void subjoinSTEPArray(StringBuilder sb, IThrowableProxy tp) { + + // not called anymore - but it is public + public static void subjoinSTEPArray(StringBuilder sb, IThrowableProxy tp) { + subjoinSTEPArray(sb, 1, tp); + } + + private static void subjoinSTEPArray(StringBuilder sb, int indentLevel, IThrowableProxy tp) { StackTraceElementProxy[] stepArray = tp.getStackTraceElementProxyArray(); int commonFrames = tp.getCommonFrames(); for (int i = 0; i < stepArray.length - commonFrames; i++) { StackTraceElementProxy step = stepArray[i]; - sb.append(CoreConstants.TAB); + for(int j = 0; j < indentLevel ; j++) { + sb.append(CoreConstants.TAB); + } subjoinSTEP(sb, step); sb.append(CoreConstants.LINE_SEPARATOR); } if (commonFrames > 0) { - sb.append("\t... ").append(commonFrames).append(" common frames omitted") + for(int j = 0; j < indentLevel ; j++) { + sb.append(CoreConstants.TAB); + } + sb.append("... ").append(commonFrames).append(" common frames omitted") .append(CoreConstants.LINE_SEPARATOR); } } - static public void subjoinFirstLine(StringBuilder buf, IThrowableProxy tp) { + public static void subjoinFirstLine(StringBuilder buf, IThrowableProxy tp) { int commonFrames = tp.getCommonFrames(); if (commonFrames > 0) { buf.append(CoreConstants.CAUSED_BY); @@ -131,7 +159,7 @@ public class ThrowableProxyUtil { subjoinExceptionMessage(buf, tp); } - static public void subjoinFirstLineRootCauseFirst(StringBuilder buf, IThrowableProxy tp) { + public static void subjoinFirstLineRootCauseFirst(StringBuilder buf, IThrowableProxy tp) { if (tp.getCause() != null) { buf.append(CoreConstants.WRAPPED_BY); } diff --git a/logback-classic/src/test/java/ch/qos/logback/classic/spi/ThrowableProxyTest.java b/logback-classic/src/test/java/ch/qos/logback/classic/spi/ThrowableProxyTest.java index 1c485e6..d5ff824 100644 --- a/logback-classic/src/test/java/ch/qos/logback/classic/spi/ThrowableProxyTest.java +++ b/logback-classic/src/test/java/ch/qos/logback/classic/spi/ThrowableProxyTest.java @@ -14,9 +14,12 @@ package ch.qos.logback.classic.spi; import static org.junit.Assert.assertEquals; +import static org.junit.Assume.assumeNotNull; import java.io.PrintWriter; import java.io.StringWriter; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import org.junit.After; import org.junit.Before; @@ -27,6 +30,25 @@ public class ThrowableProxyTest { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); + private static final Method ADD_SUPPRESSED_METHOD; + + static { + Method method = null; + try { + method = Throwable.class.getMethod("addSuppressed", Throwable.class); + } catch (NoSuchMethodException e) { + // ignore, will get thrown in Java < 7 + } + ADD_SUPPRESSED_METHOD = method; + } + + private static void addSuppressed(Throwable outer, Throwable suppressed) throws InvocationTargetException, IllegalAccessException + { + if(ADD_SUPPRESSED_METHOD != null) { + ADD_SUPPRESSED_METHOD.invoke(outer, suppressed); + } + } + @Before public void setUp() throws Exception { } @@ -71,6 +93,40 @@ public class ThrowableProxyTest { verify(w); } + @Test + public void suppressed() throws InvocationTargetException, IllegalAccessException + { + assumeNotNull(ADD_SUPPRESSED_METHOD); // only execute on Java 7, would work anyway but doesn't make sense. + Exception ex = null; + try { + someMethod(); + } catch (Exception e) { + Exception fooException = new Exception("Foo"); + Exception barException = new Exception("Bar"); + addSuppressed(e, fooException); + addSuppressed(e, barException); + ex = e; + } + verify(ex); + } + + @Test + public void suppressedWithCause() throws InvocationTargetException, IllegalAccessException + { + assumeNotNull(ADD_SUPPRESSED_METHOD); // only execute on Java 7, would work anyway but doesn't make sense. + Exception ex = null; + try { + someMethod(); + } catch (Exception e) { + ex=new Exception("Wrapper", e); + Exception fooException = new Exception("Foo"); + Exception barException = new Exception("Bar"); + addSuppressed(ex, fooException); + addSuppressed(e, barException); + } + verify(ex); + } + // see also http://jira.qos.ch/browse/LBCLASSIC-216 @Test public void nullSTE() { http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=245fd65da02ab5a82cb66ae38... http://github.com/ceki/logback/commit/245fd65da02ab5a82cb66ae388e56450889eee... commit 245fd65da02ab5a82cb66ae388e56450889eee6f Author: Joern Huxhorn <jhuxhorn@googlemail.com> Date: Sat Nov 5 03:51:33 2011 +0100 Updated to JUnit 4.10 diff --git a/pom.xml b/pom.xml index f72f1e0..6f88e10 100755 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ <!-- slf4j.version property is used below, in logback-classic/pom.xml and in setClasspath.cmd --> <slf4j.version>1.6.4</slf4j.version> - <junit.version>4.8.2</junit.version> + <junit.version>4.10</junit.version> <janino.version>2.5.10</janino.version> <scala.version>2.9.1</scala.version> <groovy.version>1.7.6</groovy.version> http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=9931dfeb2af2e7f6290567587... http://github.com/ceki/logback/commit/9931dfeb2af2e7f629056758772f44c39a43fe... commit 9931dfeb2af2e7f629056758772f44c39a43fe99 Author: Joern Huxhorn <jhuxhorn@googlemail.com> Date: Sat Nov 5 03:51:06 2011 +0100 Added *.ipr and *.iws IDEA files to .gitignore diff --git a/.gitignore b/.gitignore index 7e52e85..5e32982 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,6 @@ target .project .idea *~ -*.iml \ No newline at end of file +*.iml +*.ipr +*.iws \ No newline at end of file http://git.qos.ch/gitweb/?p=logback.git;a=commit;h=6860c6f5a7e844f213acb222d... http://github.com/ceki/logback/commit/6860c6f5a7e844f213acb222d4c13f5583734c... commit 6860c6f5a7e844f213acb222d4c13f5583734cac Author: Joern Huxhorn <jhuxhorn@googlemail.com> Date: Sat Nov 5 03:49:13 2011 +0100 Added SUPPRESSED constant. diff --git a/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java b/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java index 713879d..cfb3e86 100644 --- a/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java +++ b/logback-core/src/main/java/ch/qos/logback/core/CoreConstants.java @@ -69,6 +69,7 @@ public class CoreConstants { */ public static final Class<?>[] EMPTY_CLASS_ARRAY = new Class[]{}; public static final String CAUSED_BY = "Caused by: "; + public static final String SUPPRESSED = "\tSuppressed: "; public static final String WRAPPED_BY = "Wrapped by: "; public static final char PERCENT_CHAR = '%'; ----------------------------------------------------------------------- Summary of changes: .gitignore | 4 +- .../logback/classic/spi/ThrowableProxyUtil.java | 71 +++++++++++++++---- .../logback/classic/spi/ThrowableProxyTest.java | 56 +++++++++++++++ .../java/ch/qos/logback/core/CoreConstants.java | 1 + pom.xml | 2 +- 5 files changed, 117 insertions(+), 17 deletions(-) hooks/post-receive -- Logback: the generic, reliable, fast and flexible logging framework.