Author: vgritsenko
Date: Thu Apr 14 09:04:10 2005
New Revision: 161313

URL: http://svn.apache.org/viewcvs?view=rev&rev=161313
Log:
implement %{rootThrowable}

Modified:
    cocoon/trunk/src/java/org/apache/cocoon/util/log/CocoonLogFormatter.java

Modified: 
cocoon/trunk/src/java/org/apache/cocoon/util/log/CocoonLogFormatter.java
URL: 
http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/util/log/CocoonLogFormatter.java?view=diff&r1=161312&r2=161313
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/util/log/CocoonLogFormatter.java 
(original)
+++ cocoon/trunk/src/java/org/apache/cocoon/util/log/CocoonLogFormatter.java 
Thu Apr 14 09:04:10 2005
@@ -15,19 +15,22 @@
  */
 package org.apache.cocoon.util.log;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-
 import org.apache.avalon.framework.ExceptionUtil;
 import org.apache.avalon.framework.logger.LogKitLogger;
+
 import org.apache.cocoon.environment.ObjectModelHelper;
 import org.apache.cocoon.environment.Request;
+
 import org.apache.commons.lang.ClassUtils;
+import org.apache.commons.lang.exception.ExceptionUtils;
 import org.apache.log.ContextMap;
 import org.apache.log.LogEvent;
 import org.apache.log.Logger;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Map;
+
 /**
  * An extended pattern formatter. New patterns defined by this class are:
  * <ul>
@@ -41,6 +44,8 @@
  * <li><code>thread</code>: Outputs the name of the current thread (first 
element
  *     on the context stack).</li>
  * <li><code>host</code>: Outputs the request host header.<li>
+ * <li><code>rootThrowable</code>: Outputs the root throwable message and
+ *     stacktrace.<li>
  * </ul>
  *
  * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
@@ -60,14 +65,16 @@
     protected final static int     TYPE_THREAD = MAX_TYPE + 3;
     protected final static int     TYPE_HOST   = MAX_TYPE + 4;
     protected final static int     TYPE_QUERY  = MAX_TYPE + 5;
+    protected final static int     TYPE_ROOTTHROWABLE = MAX_TYPE + 6;
 
     protected final static String  TYPE_CLASS_STR       = "class";
     protected final static String  TYPE_CLASS_SHORT_STR = "short";
 
     protected final static String  TYPE_URI_STR         = "uri";
-    protected final static String  TYPE_QUERY_STR       = "query";
     protected final static String  TYPE_THREAD_STR      = "thread";
     protected final static String  TYPE_HOST_STR        = "host";
+    protected final static String  TYPE_QUERY_STR       = "query";
+    protected final static String  TYPE_ROOTTHROWABLE_STR = "rootThrowable";
 
     protected final static SimpleDateFormat DATE_FORMATTER = new 
SimpleDateFormat("(yyyy-MM-dd) HH:mm.ss:SSS");
 
@@ -140,7 +147,9 @@
         } else if (type.equalsIgnoreCase(TYPE_HOST_STR)) {
             return TYPE_HOST;
         } else if (type.equalsIgnoreCase(TYPE_QUERY_STR)) {
-            return TYPE_QUERY;  
+            return TYPE_QUERY;
+        } else if (type.equalsIgnoreCase(TYPE_ROOTTHROWABLE_STR)) {
+            return TYPE_ROOTTHROWABLE;
         } else {
             return super.getTypeIdFor(type);
         }
@@ -160,6 +169,8 @@
                 return getHost(event.getContextMap());
             case TYPE_QUERY:
                 return getQueryString(event.getContextMap());
+            case TYPE_ROOTTHROWABLE:
+                return 
getStackTrace(ExceptionUtils.getRootCause(event.getThrowable()), run.m_format);
         }
         return super.formatPatternRun(event, run);
     }
@@ -227,7 +238,7 @@
         }
         return "";
     }
-    
+
     /**
      * Find the host header of the request that is being processed.
      */


Reply via email to