r9755 - in helma-ng/trunk: modules/helma src/org/helma/util

[email protected] Thu, 14 May 2009 15:18:44 +0200 (CEST)
Newsgroups gmane.comp.java.helma.cvs
Message-ID <20090514131844.91C173D0D6@mia>
Author: hannes
Date: 2009-05-14 15:18:44 +0200 (Thu, 14 May 2009)
New Revision: 9755

Modified:
   helma-ng/trunk/modules/helma/logging.js
   helma-ng/trunk/src/org/helma/util/RhinoAppender.java
Log:
Clean up response logging implementation in helma/logging

Details at http://dev.helma.org/trac/helma/changeset/9755

Modified: helma-ng/trunk/modules/helma/logging.js
===================================================================
--- helma-ng/trunk/modules/helma/logging.js	2009-05-14 13:18:39 UTC (rev 9754)
+++ helma-ng/trunk/modules/helma/logging.js	2009-05-14 13:18:44 UTC (rev 9755)
@@ -1,4 +1,5 @@
 require('core/string');
+include('hashp');
 include('helma/system');
 include('helma/buffer');
 
@@ -54,8 +55,8 @@
     var messages = [];
     var appender = Logger.getRootLogger().getAppender("rhino") || {};
 
-    appender.callback = function(message, scriptStack, javaStack) {
-        messages.push([message, scriptStack, javaStack]);
+    appender.callback = function(level, message, scriptStack, javaStack) {
+        messages.push([level, message, scriptStack, javaStack]);
     };
 
     var res;
@@ -69,42 +70,66 @@
         res = res.close();
     }
 
-    if (res[0] != 200 && res[0] < 400) {
+    var [status, headers, body] = res;
+
+    // only do this for ordinary HTML responses
+    var contentType = HashP.get(headers, "content-type");
+    if (status != 200 && status < 400 || !contentType || !contentType.startsWith("text/html")) {
         return res;
     }
 
     if (messages.length > 0) {
         var ResponseFilter = require("helma/webapp/util").ResponseFilter;
-        res[2] = new ResponseFilter(res[2], function(part) {
+        res[2] = new ResponseFilter(body, function(part) {
             if (typeof part != "string" && part.lastIndexOf("</body>") == -1) {
                 return part;
             }
-            var buffer = new Buffer();
-            for (var i = 0; i < messages.length; i++) {
-                var item = messages[i];
-                var msg = item[0];
-                var multiline = msg && msg.trim().indexOf('\n') > 0 || msg.indexOf('\r')> 0;
-                buffer.write("<div class=\"helma-debug-line\" style=\"background: #fc3;");
-                buffer.write("color: black; border-top: 1px solid black;\">");
-                if (multiline) {
-                    buffer.write("<pre>").write(msg).write("</pre>");
-                } else {
-                    buffer.write(msg);
-                }
-                if (item[1]) {
-                    buffer.write("<h4 style='padding-left: 8px; margin: 4px;'>Script Stack</h4>");
-                    buffer.write("<pre style='margin: 0;'>", item[1], "</pre>");
-                }
-                if (item[2]) {
-                    buffer.write("<h4 style='padding-left: 8px; margin: 4px;'>Java Stack</h4>");
-                    buffer.write("<pre style='margin: 0;'>", item[2], "</pre>");
-                }
-                buffer.writeln("</div>");
-            }
-            var insert = part.lastIndexOf("</body>");
-            return part.substring(0, insert) + buffer + part.substring(insert);
+            return injectMessages(part, messages);
         });
     }
 
     return res;
 };
+
+function injectMessages(part, messages) {
+    var buffer = new Buffer();
+    for (var i = 0; i < messages.length; i++) {
+        appendMessage(buffer, messages[i]);
+    }
+    var insert = part.lastIndexOf("</body>");
+    return part.substring(0, insert) + buffer + part.substring(insert);
+}
+
+function appendMessage(buffer, item) {
+    var [level, message, jsstack, javastack] = item;
+    var multiline = message
+            && (message.trim().indexOf('\n') > 0 || message.indexOf('\r')> 0);
+    var bgcolor = colors[level.toString()] || '#fff';
+    buffer.write("<div class='helma-debug-line' style='background:", bgcolor,
+                 "; color: black; border-top: 1px solid black;'>");
+    if (multiline) {
+        buffer.write("<pre>", message, "</pre>");
+    } else {
+        buffer.write(message);
+    }
+    appendStackTrace(buffer, "Script Stack", jsstack);
+    appendStackTrace(buffer, "Java Stack", javastack);
+    buffer.writeln("</div>");    
+}
+
+function appendStackTrace(buffer, header, stack) {
+    if (stack) {
+        buffer.write("<h4 style='padding-left: 8px; margin: 4px;'>");
+        buffer.write(header);
+        buffer.write("</h4>");
+        buffer.write("<pre style='margin: 0;'>", stack, "</pre>");
+    }
+}
+
+var colors = {
+    DEBUG: '#fff',
+    INFO: '#ff6',
+    WARN: '#ff0',
+    ERROR: '#f90',
+    FATAL: '#f30'
+}
\ No newline at end of file

Modified: helma-ng/trunk/src/org/helma/util/RhinoAppender.java
===================================================================
--- helma-ng/trunk/src/org/helma/util/RhinoAppender.java	2009-05-14 13:18:39 UTC (rev 9754)
+++ helma-ng/trunk/src/org/helma/util/RhinoAppender.java	2009-05-14 13:18:44 UTC (rev 9755)
@@ -56,7 +56,7 @@
             }
         }
 
-        Object[] args = new Object[] {message, scriptStack, javaStack};
+        Object[] args = new Object[] {event.getLevel(), message, scriptStack, javaStack};
         cb.call(cx, cb.getParentScope(), null, args);
     }