From d416e7431781541eb33bf743e94b9c2ea29f080b Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Wed, 02 Jan 2008 22:32:06 +0000
Subject: [PATCH] Fixed debug logger so the message from the exception that caused a thrown exception is printed along with its stack trace.
---
opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java | 89 +++++++++++++++++++++++++++++---------------
opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugTracer.java | 22 +++++-----
opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java | 6 +-
3 files changed, 72 insertions(+), 45 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
index 079af66..dccc8a6 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.loggers.debug;
@@ -140,45 +140,72 @@
{
StringBuilder buffer= new StringBuilder();
- while(t != null)
+ StackTraceElement[] trace = t.getStackTrace();
+ int frameLimit = Math.min(maxDepth, trace.length);
+ for (int i=0; i < frameLimit; i++)
{
- StackTraceElement[] frames = t.getStackTrace();
+ buffer.append(" at ");
+ buffer.append(trace[i]);
+ buffer.append(EOL);
+ }
+ if(frameLimit < trace.length)
+ {
+ buffer.append(" ... ");
+ buffer.append(trace.length - frameLimit);
+ buffer.append(" more");
+ buffer.append(EOL);
+ }
- if (frames != null) {
- int frameLimit= Math.min(maxDepth, frames.length);
- if (frameLimit > 0) {
-
-
- for (int i= 0; i < frameLimit; i++) {
- buffer.append(" ");
- buffer.append(frames[i]);
- buffer.append(EOL);
- }
-
- if(frameLimit < frames.length)
- {
- buffer.append(" ...(");
- buffer.append(frames.length - frameLimit);
- buffer.append(" more)");
- buffer.append(EOL);
- }
- }
- }
-
- if(includeCause && t.getCause() != null)
+ if(includeCause)
+ {
+ Throwable ourCause = t.getCause();
+ if (ourCause != null)
{
- t = t.getCause();
- buffer.append(" caused by ");
- }
- else
- {
- t = null;
+ formatStackTraceForCause(ourCause, maxDepth, buffer, trace);
}
}
return buffer.toString();
}
+ private static void formatStackTraceForCause(Throwable t, int maxDepth,
+ StringBuilder buffer,
+ StackTraceElement[] causedTrace)
+ {
+ StackTraceElement[] trace = t.getStackTrace();
+ int framesToSkip = Math.max(trace.length - maxDepth, 0);
+
+ // Compute number of frames in common between this and caused
+ int m = trace.length - 1 - framesToSkip;
+ int n = causedTrace.length - 1 - framesToSkip;
+ while (m >= 0 && n >=0 && trace[m].equals(causedTrace[n])) {
+ m--; n--;
+ }
+ framesToSkip = trace.length - 1 - m;
+
+ buffer.append("Caused by: ");
+ buffer.append(t);
+ buffer.append(EOL);
+ for (int i=0; i <= m; i++)
+ {
+ buffer.append(" at ");
+ buffer.append(trace[i]);
+ buffer.append(EOL);
+ }
+ if (framesToSkip != 0)
+ {
+ buffer.append(" ... ");
+ buffer.append(framesToSkip);
+ buffer.append(" more");
+ buffer.append(EOL);
+ }
+
+ // Recurse if we have a cause
+ Throwable ourCause = t.getCause();
+ if (ourCause != null)
+ formatStackTraceForCause(ourCause, maxDepth, buffer, trace);
+ }
+
/**
* Generate a String representation of the possibly filtered stack trace
* from the current position in executation.
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugTracer.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugTracer.java
index 5c06a4f..bdefce1 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugTracer.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/DebugTracer.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.loggers.debug;
@@ -176,7 +176,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (activeSettings.noArgs)
@@ -266,7 +266,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (activeSettings.noArgs)
@@ -355,7 +355,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (activeSettings.noArgs)
@@ -444,7 +444,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (activeSettings.noRetVal)
@@ -533,7 +533,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (filteredStackTrace == null && activeSettings.stackDepth > 0)
@@ -721,7 +721,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if(msgArgs != null && msgArgs.length > 0)
@@ -808,7 +808,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (filteredStackTrace == null && activeSettings.stackDepth > 0)
@@ -896,7 +896,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (filteredStackTrace == null && activeSettings.stackDepth > 0)
@@ -980,7 +980,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (filteredStackTrace == null && activeSettings.stackDepth > 0)
@@ -1062,7 +1062,7 @@
}
}
- String sl = callerFrame.getFileName() + " @ " +
+ String sl = callerFrame.getFileName() + ":" +
callerFrame.getLineNumber();
if (filteredStackTrace == null && activeSettings.stackDepth > 0)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
index f97f2fe..ecf600e 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
@@ -22,7 +22,7 @@
* CDDL HEADER END
*
*
- * Portions Copyright 2006-2007 Sun Microsystems, Inc.
+ * Portions Copyright 2006-2008 Sun Microsystems, Inc.
*/
package org.opends.server.loggers.debug;
import org.opends.messages.Message;
@@ -817,9 +817,9 @@
// Emit method info.
buf.append("method={");
buf.append(signature);
- buf.append(" @ ");
+ buf.append("(");
buf.append(sourceLocation);
- buf.append("} ");
+ buf.append(")} ");
// Emit message.
buf.append(msg);
--
Gitblit v1.10.0