diff --git a/deps/.classpath b/deps/.classpath
index 6936ec7f928..d16979b78ad 100644
--- a/deps/.classpath
+++ b/deps/.classpath
@@ -21,7 +21,7 @@
-
+
diff --git a/utils/src/com/cloud/utils/log/CglibThrowableRenderer.java b/utils/src/com/cloud/utils/log/CglibThrowableRenderer.java
index 25d5b499655..4ae38182452 100644
--- a/utils/src/com/cloud/utils/log/CglibThrowableRenderer.java
+++ b/utils/src/com/cloud/utils/log/CglibThrowableRenderer.java
@@ -67,22 +67,35 @@ public class CglibThrowableRenderer implements ThrowableRenderer {
}
}
- /**
- * {@inheritDoc}
- */
@Override
- public String[] doRender(final Throwable throwable) {
+ public String[] doRender(final Throwable th) {
try {
Object[] noArgs = null;
- Object[] elements = (Object[])getStackTraceMethod.invoke(throwable, noArgs);
- ArrayList lines = new ArrayList(elements.length + 1);
+ ArrayList lines = new ArrayList();
+ Throwable throwable = th;
lines.add(throwable.toString());
Map classMap = new HashMap();
- for (int i = 0; i < elements.length; i++) {
- if (!(elements[i] instanceof StackTraceElement) || !((StackTraceElement)elements[i]).getFileName().equals("")) {
+ int start = 0;
+ do {
+ Object[] elements = (Object[])getStackTraceMethod.invoke(throwable, noArgs);
+ for (int i = 0; i < elements.length - start; i++) {
+ if (elements[i] instanceof StackTraceElement) {
+ StackTraceElement stack = (StackTraceElement)elements[i];
+ if (stack.getFileName().equals("") || stack.getFileName().equals("MethodProxy.java")) {
+ continue;
+ }
+ }
lines.add(formatElement(elements[i], classMap));
}
- }
+ if (start != 0) {
+ lines.add("\t... " + start + " more");
+ }
+ throwable = throwable.getCause();
+ if (throwable != null) {
+ lines.add("Caused by: " + throwable.toString());
+ start = elements.length - 1;
+ }
+ } while (throwable != null);
return lines.toArray(new String[lines.size()]);
} catch (Exception ex) {
return null;
diff --git a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java
index 6999f9acf2d..b7cd5e59c7a 100644
--- a/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java
+++ b/utils/test/com/cloud/utils/log/CglibThrowableRendererTest.java
@@ -12,9 +12,24 @@ import com.cloud.utils.exception.CloudRuntimeException;
public class CglibThrowableRendererTest extends TestCase {
private final static Logger s_logger = Logger.getLogger(CglibThrowableRendererTest.class);
public static class Test {
+ public void exception1() {
+ throw new IllegalArgumentException("What a bad exception");
+ }
+
+ public void exception2() {
+ try {
+ exception1();
+ } catch (Exception e) {
+ throw new CloudRuntimeException("exception2", e);
+ }
+ }
@DB
public void exception() {
- throw new CloudRuntimeException("exception");
+ try {
+ exception2();
+ } catch (Exception e) {
+ throw new CloudRuntimeException("exception", e);
+ }
}
}
@@ -26,5 +41,4 @@ public class CglibThrowableRendererTest extends TestCase {
s_logger.warn("exception caught", e);
}
}
-
}