Update of /var/cvs/src/org/mmbase/framework
In directory james.mmbase.org:/tmp/cvs-serv8606/framework

Modified Files:
        ErrorRenderer.java 
Log Message:
some efforts to make the error-pages less absurdly verbose


See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/framework


Index: ErrorRenderer.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/framework/ErrorRenderer.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- ErrorRenderer.java  26 Sep 2008 15:40:00 -0000      1.17
+++ ErrorRenderer.java  2 Oct 2008 12:09:41 -0000       1.18
@@ -28,7 +28,7 @@
  * share code.
  *
  * @author Michiel Meeuwissen
- * @version $Id: ErrorRenderer.java,v 1.17 2008/09/26 15:40:00 michiel Exp $
+ * @version $Id: ErrorRenderer.java,v 1.18 2008/10/02 12:09:41 michiel Exp $
  * @since MMBase-1.9
  */
 
@@ -38,6 +38,8 @@
     protected final Error error;
     protected final String url;
 
+    protected static int MAX_CAUSES = 4;
+
     public ErrorRenderer(Type t, Block parent, String u, int status, String m) 
{
         super(t, parent);
         error = new Error(status, new Exception(m));
@@ -147,7 +149,11 @@
 
 
 
-        public Writer getErrorReport(Writer msg, final HttpServletRequest 
request, CharTransformer escape) throws IOException {
+        public Writer getErrorReport(Writer to, final HttpServletRequest 
request, CharTransformer escape) throws IOException {
+            final Writer logMsg = new StringWriter();
+            final Writer tee    = new org.mmbase.util.ChainedWriter(to, 
logMsg);
+            Writer msg = tee;
+
             LinkedList<Throwable> stack = getStack();
             String ticket = new Date().toString();
 
@@ -165,7 +171,7 @@
                 Enumeration en2 = request.getAttributeNames();
                 while (en2.hasMoreElements()) {
                     String name = (String) en2.nextElement();
-                    msg.append(escape.transform(name+": 
"+request.getAttribute(name)+"\n"));
+                    msg.append(escape.transform(name + ": " + 
request.getAttribute(name) + "\n"));
                 }
             }
             msg.append("\n");
@@ -190,27 +196,41 @@
                     msg.append(name).append(": 
").append(escape.transform(request.getParameter(name))).append("\n");
                 }
             }
-            msg.append("\nException\n----------\n\n" + (exception != null ? 
(escape.transform(exception.getClass().getName())) : "NO EXCEPTION") + ": ");
-
+            msg.append("\nException " + ticket + "\n----------\n\n" + 
(exception != null ? (escape.transform(exception.getClass().getName())) : "NO 
EXCEPTION") + ": ");
 
+            int wroteCauses = 0;
             while (! stack.isEmpty()) {
 
                 Throwable t = stack.removeFirst();
                 // add stack stacktraces
                 if (t != null) {
+                    if (stack.isEmpty()) { // write last message always
+                        msg = tee;
+                    }
                     String message = t.getMessage();
-                    msg.append(escape.transform(message)).append("\n");
-                    
msg.append(escape.transform(org.mmbase.util.logging.Logging.stackTrace(t)));
+                    if (msg != tee) {
+                        to.append("\n=== skipped(see log)  : " + 
escape.transform(t.getClass().getName()) + ": " + message + "\n");
+                    }
+
+                    
msg.append("\n\n").append(escape.transform(t.getClass().getName() + ": " + 
message));
+                    StackTraceElement[] stackTrace = t.getStackTrace();
+                    for (StackTraceElement e : stackTrace) {
+                        msg.append("\n        at 
").append(escape.transform(e.toString()));
+                    }
                     if (! stack.isEmpty()) {
                         msg.append("\n-------caused:\n");
                     }
+                    wroteCauses++;
+                    if (wroteCauses >= MAX_CAUSES ) {
+                        msg = logMsg;
+                    }
                 }
             }
             // write errors to mmbase log
             if (status == 500) {
-                log.error(ticket + ":\n" + msg);
+                log.error("TICKET " + ticket + ":\n" + logMsg);
             }
-            return msg;
+            return to;
         }
     }
 
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to