From d755882f59202fe62b2ad5a141b3c044c1898aa6 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Thu, 03 May 2007 21:55:23 +0000
Subject: [PATCH] Major changes made to the logging framework. It should resolve the following issues:
---
opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java | 72 +++++++++++++++++++++++++++++++-----
1 files changed, 62 insertions(+), 10 deletions(-)
diff --git a/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java b/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
index 8204e19..f8b85b4 100644
--- a/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
+++ b/opends/src/server/org/opends/server/loggers/debug/DebugStackTraceFormatter.java
@@ -26,6 +26,8 @@
*/
package org.opends.server.loggers.debug;
+import static org.opends.server.util.ServerConstants.EOL;
+
/**
* A DebugStackTraceFormatter converts an exception's stack trace into
* a String appropriate for tracing, optionally performing filtering
@@ -50,10 +52,11 @@
/**
* Filters out all undesired stack frames from the given Throwable's
* stack trace.
- * @param t - the Throwable for which a stack trace is being generated.
+ * @param frames the frames to filter
* @return an array of StackTraceElements to be used in formatting.
*/
- public StackTraceElement[] getFilteredStackTrace(Throwable t);
+ public StackTraceElement[] getFilteredStackTrace(
+ StackTraceElement[] frames);
}
/**
@@ -78,12 +81,12 @@
* Return the stack trace of an exception with debug and trailing non
* OpenDS frames filtered out.
*
- * @param t the throwable to filter.
+ * @param frames the frames to filter
* @return the filtered stack trace.
*/
- public StackTraceElement[] getFilteredStackTrace(Throwable t)
+ public StackTraceElement[] getFilteredStackTrace(
+ StackTraceElement[] frames)
{
- StackTraceElement[] frames= t.getStackTrace();
StackTraceElement[] trimmedStack= null;
if (frames != null && frames.length > 0) {
int firstFrame= 0;
@@ -141,23 +144,29 @@
while(t != null)
{
- StackTraceElement[] frames= filter != null ?
- filter.getFilteredStackTrace(t) : t.getStackTrace();
+ StackTraceElement[] frames = t.getStackTrace();
+ if(filter != null)
+ {
+ frames = filter.getFilteredStackTrace(frames);
+ }
+
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(" / ");
+ buffer.append(EOL);
}
if(frameLimit < frames.length)
{
- buffer.append("...(");
+ buffer.append(" ...(");
buffer.append(frames.length - frameLimit);
buffer.append(" more)");
+ buffer.append(EOL);
}
}
}
@@ -165,7 +174,7 @@
if(includeCause && t.getCause() != null)
{
t = t.getCause();
- buffer.append("; caused by ");
+ buffer.append(" caused by ");
}
else
{
@@ -175,4 +184,47 @@
return buffer.toString();
}
+
+ /**
+ * Generate a String representation of the possibly filtered stack trace
+ * from the current position in executation.
+ * @param filter - a FrameFilter to use to exclude some stack frames from
+ * the trace. If null, no filtering is performed.
+ * @param maxDepth - the maximum number of stack frames to include in the
+ * trace.
+ * @return the stack trace.
+ */
+ public static String formatStackTrace(FrameFilter filter, int maxDepth)
+ {
+ StringBuffer buffer= new StringBuffer();
+
+ StackTraceElement[] frames = Thread.currentThread().getStackTrace();
+ if(filter != null)
+ {
+ frames = filter.getFilteredStackTrace(frames);
+ }
+
+ 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);
+ }
+ }
+ }
+
+ return buffer.toString();
+ }
}
--
Gitblit v1.10.0