You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/07/08 01:33:29 UTC

svn commit: r961535 - in /tomcat/trunk: java/org/apache/catalina/ java/org/apache/catalina/core/ java/org/apache/jasper/ java/org/apache/jasper/compiler/ java/org/apache/jasper/servlet/ webapps/docs/

Author: markt
Date: Wed Jul  7 23:33:28 2010
New Revision: 961535

URL: http://svn.apache.org/viewvc?rev=961535&view=rev
Log:
Improve logging of unhandled servlet exceptions by including the context name. For JasperExceptions, the JSP snippet will be logged (if enabled). Previously this was not logged and only displayed in the error page seen by the user.

Modified:
    tomcat/trunk/java/org/apache/catalina/Globals.java
    tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java
    tomcat/trunk/java/org/apache/jasper/Constants.java
    tomcat/trunk/java/org/apache/jasper/compiler/JavacErrorDetail.java
    tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/Globals.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Globals.java?rev=961535&r1=961534&r2=961535&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Globals.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Globals.java Wed Jul  7 23:33:28 2010
@@ -177,6 +177,12 @@ public final class Globals {
 
 
     /**
+     * Platform specific new line sequence.
+     */
+    public static final String NEWLINE = System.getProperty("line.separator");
+    
+    
+    /**
      * The request attribute under which the request URI of the included
      * servlet is stored on an included dispatcher request.
      */

Modified: tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties?rev=961535&r1=961534&r2=961535&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties Wed Jul  7 23:33:28 2010
@@ -226,7 +226,8 @@ standardWrapper.notContext=Parent contai
 standardWrapper.notFound=Servlet {0} is not available
 standardWrapper.notServlet=Class {0} is not a Servlet
 standardWrapper.releaseFilters=Release filters exception for servlet {0}
-standardWrapper.serviceException=Servlet.service() for servlet {0} threw exception
+standardWrapper.serviceException=Servlet.service() for servlet [{0}] in context with path [{1}] threw exception
+standardWrapper.serviceExceptionRoot=Servlet.service() for servlet [{0}] in context with path [{1}] threw exception [{2}] with root cause
 standardWrapper.statusHeader=HTTP Status {0} - {1}
 standardWrapper.statusTitle=Tomcat Error Report
 standardWrapper.unavailable=Marking servlet {0} as unavailable

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java?rev=961535&r1=961534&r2=961535&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapperValve.java Wed Jul  7 23:33:28 2010
@@ -253,14 +253,16 @@ final class StandardWrapperValve
             exception(request, response, e);
         } catch (IOException e) {
         	request.removeAttribute(Globals.JSP_FILE_ATTR);
-            container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                             wrapper.getName()), e);
+            container.getLogger().error(sm.getString(
+                    "standardWrapper.serviceException", wrapper.getName(),
+                    context.getName()), e);
             throwable = e;
             exception(request, response, e);
         } catch (UnavailableException e) {
         	request.removeAttribute(Globals.JSP_FILE_ATTR);
-            container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                             wrapper.getName()), e);
+            container.getLogger().error(sm.getString(
+                    "standardWrapper.serviceException", wrapper.getName(),
+                    context.getName()), e);
             //            throwable = e;
             //            exception(request, response, e);
             wrapper.unavailable(e);
@@ -281,15 +283,18 @@ final class StandardWrapperValve
         	request.removeAttribute(Globals.JSP_FILE_ATTR);
             Throwable rootCause = StandardWrapper.getRootCause(e);
             if (!(rootCause instanceof ClientAbortException)) {
-                container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                                 wrapper.getName()), rootCause);
+                container.getLogger().error(sm.getString(
+                        "standardWrapper.serviceExceptionRoot",
+                        wrapper.getName(), context.getName(), e.getMessage()),
+                        rootCause);
             }
             throwable = e;
             exception(request, response, e);
         } catch (Throwable e) {
             request.removeAttribute(Globals.JSP_FILE_ATTR);
-            container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                             wrapper.getName()), e);
+            container.getLogger().error(sm.getString(
+                    "standardWrapper.serviceException", wrapper.getName(),
+                    context.getName()), e);
             throwable = e;
             exception(request, response, e);
         }
@@ -437,29 +442,34 @@ final class StandardWrapperValve
             exception(request, response, e);
         } catch (IOException e) {
             request.removeAttribute(Globals.JSP_FILE_ATTR);
-            container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                             wrapper.getName()), e);
+            container.getLogger().error(sm.getString(
+                    "standardWrapper.serviceException", wrapper.getName(),
+                    context.getName()), e);
             throwable = e;
             exception(request, response, e);
         } catch (UnavailableException e) {
             request.removeAttribute(Globals.JSP_FILE_ATTR);
-            container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                             wrapper.getName()), e);
+            container.getLogger().error(sm.getString(
+                    "standardWrapper.serviceException", wrapper.getName(),
+                    context.getName()), e);
             // Do not save exception in 'throwable', because we
             // do not want to do exception(request, response, e) processing
         } catch (ServletException e) {
             request.removeAttribute(Globals.JSP_FILE_ATTR);
             Throwable rootCause = StandardWrapper.getRootCause(e);
             if (!(rootCause instanceof ClientAbortException)) {
-                container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                                 wrapper.getName()), rootCause);
+                container.getLogger().error(sm.getString(
+                        "standardWrapper.serviceExceptionRoot",
+                        wrapper.getName(), context.getName(), e.getMessage()),
+                        rootCause);
             }
             throwable = e;
             exception(request, response, e);
         } catch (Throwable e) {
             request.removeAttribute(Globals.JSP_FILE_ATTR);
-            container.getLogger().error(sm.getString("standardWrapper.serviceException",
-                             wrapper.getName()), e);
+            container.getLogger().error(sm.getString(
+                    "standardWrapper.serviceException", wrapper.getName(),
+                    context.getName()), e);
             throwable = e;
             exception(request, response, e);
         }

Modified: tomcat/trunk/java/org/apache/jasper/Constants.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Constants.java?rev=961535&r1=961534&r2=961535&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/Constants.java (original)
+++ tomcat/trunk/java/org/apache/jasper/Constants.java Wed Jul  7 23:33:28 2010
@@ -97,6 +97,11 @@ public class Constants {
     public static final int MAX_POOL_SIZE = 5;
 
     /**
+     * Platform specific new line sequence.
+     */
+    public static final String NEWLINE = System.getProperty("line.separator");
+
+    /**
      * The query parameter that causes the JSP engine to just
      * pregenerated the servlet but not invoke it. 
      */

Modified: tomcat/trunk/java/org/apache/jasper/compiler/JavacErrorDetail.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JavacErrorDetail.java?rev=961535&r1=961534&r2=961535&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/JavacErrorDetail.java (original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/JavacErrorDetail.java Wed Jul  7 23:33:28 2010
@@ -25,6 +25,7 @@ import java.io.InputStreamReader;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.jasper.Constants;
 import org.apache.jasper.JspCompilationContext;
 
 /**
@@ -129,7 +130,7 @@ public class JavacErrorDetail {
                     fragment.append(i+1);
                     fragment.append(": ");
                     fragment.append(jspLines[i]);
-                    fragment.append("\n");
+                    fragment.append(Constants.NEWLINE);
                 }
                 jspExtract = fragment.toString();
     

Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java?rev=961535&r1=961534&r2=961535&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java (original)
+++ tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Wed Jul  7 23:33:28 2010
@@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.jsp.tagext.TagInfo;
 
+import org.apache.jasper.Constants;
 import org.apache.jasper.JasperException;
 import org.apache.jasper.JspCompilationContext;
 import org.apache.jasper.Options;
@@ -509,9 +510,10 @@ public class JspServletWrapper {
             if (options.getDisplaySourceFragment()) {
                 return new JasperException(Localizer.getMessage
                         ("jsp.exception", detail.getJspFileName(),
-                                "" + jspLineNumber) +
-                                "\n\n" + detail.getJspExtract() +
-                                "\n\nStacktrace:", ex);
+                                "" + jspLineNumber) + Constants.NEWLINE +
+                                Constants.NEWLINE + detail.getJspExtract() +
+                                Constants.NEWLINE + Constants.NEWLINE + 
+                                "Stacktrace:", ex);
                 
             }
 

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=961535&r1=961534&r2=961535&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Jul  7 23:33:28 2010
@@ -112,6 +112,10 @@
         <bug>49551</bug>: Allow default context.xml location to be specified
         using an absolute path. (markt)
       </fix>
+      <add>
+        Improve logging of unhandled exceptions in servlets by including the
+        path of the context where the error occurred. (markt)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Jasper">
@@ -131,6 +135,10 @@
         <bug>49217</bug>: Ensure that identifiers used in EL meet the
         requirements of the Java Language Specification. (markt)
       </fix>
+      <add>
+        Improve logging of JSP exceptions by including JSP snippet (if enabled)
+        rather than just the root cause in the host log. (markt)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Cluster">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org