You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/09/08 23:28:41 UTC

svn commit: r573910 - in /tapestry/tapestry5/trunk: src/site/apt/ tapestry-core/src/main/java/org/apache/tapestry/internal/services/ tapestry-core/src/site/ tapestry-core/src/site/apt/guide/ tapestry-core/src/test/java/org/apache/tapestry/internal/serv...

Author: hlship
Date: Sat Sep  8 14:28:40 2007
New Revision: 573910

URL: http://svn.apache.org/viewvc?rev=573910&view=rev
Log:
TAPESTRY-1738: Render debugging output is incredibly verbose, and should only be output at the TRACE (i.e. more vebose than DEBUG) logging level

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/logging.apt
Modified:
    tapestry/tapestry5/trunk/src/site/apt/jetty.apt
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java
    tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml
    tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java
    tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/test/IOCTestCase.java

Modified: tapestry/tapestry5/trunk/src/site/apt/jetty.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/src/site/apt/jetty.apt?rev=573910&r1=573909&r2=573910&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/src/site/apt/jetty.apt (original)
+++ tapestry/tapestry5/trunk/src/site/apt/jetty.apt Sat Sep  8 14:28:40 2007
@@ -14,4 +14,12 @@
   
 * Logging
 
-  TODO: Discuss logging configuration for Jetty.
\ No newline at end of file
+  Tapestry, in its default configuration, requires Log4J version 1.2.12 or better
+  (it makes use of the 
+  {{{http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html#isTraceEnabled()}isTraceEnabled()}} and
+  {{http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Logger.html#trace(java.lang.Object)}trace()}} methods,
+  introduced in version 1.2.12.
+  
+  You may have to replace the version of Log4J in your Jetty's ext directory with a newer version.
+
+  
\ No newline at end of file

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java?rev=573910&r1=573909&r2=573910&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry/internal/services/RenderQueueImpl.java Sat Sep  8 14:28:40 2007
@@ -42,6 +42,8 @@
     {
         RenderCommand command = null;
 
+        boolean traceEnabled = _logger.isTraceEnabled();
+
         // Seems to make sense to use one try/finally around the whole process, rather than
         // around each call to render() since the end result (in a failure scenario) is the same.
 
@@ -51,8 +53,7 @@
             {
                 command = _queue.pop();
 
-                if (_logger.isDebugEnabled())
-                    _logger.debug(String.format("Executing: %s", command));
+                if (traceEnabled) _logger.trace(String.format("Executing: %s", command));
 
                 command.render(writer, this);
             }

Added: tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/logging.apt
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/logging.apt?rev=573910&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/logging.apt (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/site/apt/guide/logging.apt Sat Sep  8 14:28:40 2007
@@ -0,0 +1,147 @@
+ ----
+  Logging
+ ----
+ 
+Logging of Tapestry Components and Pages
+
+  Tapestry makes extensive use of
+  {{{http://www.slf4j.org/}SLF4J}} to log details about the creation and operation of your page and component classes.
+  
+  The default configuration for logging uses 
+  {{{http://logging.apache.org/log4j/}Log4J}} as the logging toolkit, though
+  {{{http://tapestry.apache.org/tapestry5/tapestry-ioc/logging.html}this can be changed}}.
+  
+  
+Class to Logger
+
+  The logger name for a page or component matches the fully qualified class name.  You can configure this in log4j.properties:
+  
+----
+log4j.category.org.apache.tapestry.integration.app1.pages.MerryChristmas=trace
+----
+  
+Injecting Loggers
+
+  You may mark a field of type 
+  {{{http://www.slf4j.org/api/org/slf4j/Logger.html}Logger}} with the @Inject annotation.  The proper Logger for your
+  page or component will be injected.
+  
+---
+public class MyPage
+{
+  @Inject
+  private Logger _logger;
+  
+  . . .
+---
+
+DEBUG Level
+
+  When a component's logger is configured at the DEBUG level, you will see added output when the class is first
+  accessed identifying how Tapestry is modifying the bytecode of the class.  
+  
+  Example:
+  
+---
+[DEBUG] MerryChristmas Finished class transformation: InternalClassTransformation[
+public org.apache.tapestry.integration.app1.pages.MerryChristmas extends java.lang.Object
+  implements org.apache.tapestry.runtime.Component, org.apache.tapestry.runtime.RenderCommand
+
+add default method: public void postRenderCleanup()
+<default>
+
+add default method: public void setupRender(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public void beginRender(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public void beforeRenderTemplate(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public void afterRenderTemplate(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public void beforeRenderBody(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public void afterRenderBody(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public void afterRender(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public void cleanupRender(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.Event $2)
+<default>
+
+add default method: public boolean handleComponentEvent(org.apache.tapestry.runtime.ComponentEvent $1)
+<default>
+
+add default method: public org.apache.tapestry.ComponentResources getComponentResources()
+<default>
+
+add default method: public void containingPageDidLoad()
+<default>
+
+add default method: public void containingPageDidDetach()
+<default>
+
+add default method: public void containingPageDidAttach()
+<default>
+
+add field: protected final org.apache.tapestry.internal.InternalComponentResources _$resources;
+
+replace method: public final org.apache.tapestry.ComponentResources getComponentResources()
+return _$resources;
+
+add default method: public void render(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.RenderQueue $2)
+<default>
+
+replace method: public void render(org.apache.tapestry.MarkupWriter $1, org.apache.tapestry.runtime.RenderQueue $2)
+_$resources.queueRender($2);
+
+convert default constructor: initializer();
+
+add constructor: org.apache.tapestry.integration.app1.pages.MerryChristmas(org.apache.tapestry.internal.InternalComponentResources $1)
+{
+  _$resources = $1;
+  initializer();
+
+}
+
+]
+----
+
+  Is this helpful?  Probably only if you are developing your own code that integrates into the component class transformation chain; for example,
+  to support your own field and method annotations.
+  
+TRACE Level
+
+  At the TRACE level ''for pages'' enables extremely verbose logging of every activity that drives the rendering of output, such as each component
+  working its way through the {{{rendering.html}rendering stage machine}}.  Example:
+  
+----
+[TRACE] MerryChristmas Executing: ComponentPageElement[MerryChristmas]
+[TRACE] MerryChristmas Executing: SetupRender[MerryChristmas]
+[TRACE] MerryChristmas Executing: BeginRender[MerryChristmas]
+[TRACE] MerryChristmas Executing: BeforeRenderTemplate[MerryChristmas]
+[TRACE] MerryChristmas Executing: ComponentPageElement[MerryChristmas:border]
+[TRACE] MerryChristmas Executing: SetupRender[MerryChristmas:border]
+[TRACE] MerryChristmas Executing: BeginRender[MerryChristmas:border]
+[TRACE] MerryChristmas Executing: BeforeRenderTemplate[MerryChristmas:border]
+[TRACE] MerryChristmas Executing: Start[html]
+[TRACE] MerryChristmas Executing: Text[
+    ]
+[TRACE] MerryChristmas Executing: Start[head]
+[TRACE] MerryChristmas Executing: Text[
+        ]
+[TRACE] MerryChristmas Executing: Start[title]
+[TRACE] MerryChristmas Executing: Text[Tapestry Integration Test Application #1]
+
+  . . .
+----
+
+  Is this helpful?  Only if you are writing your own components and get an exception about unbalanced elements. This output gives
+  you a detailed view into what has rendered and when, so you can track it down.
+    
+  
\ No newline at end of file

Modified: tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml?rev=573910&r1=573909&r2=573910&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/site/site.xml Sat Sep  8 14:28:40 2007
@@ -79,7 +79,8 @@
             <item name="Request Processing" href="guide/request.html"/>
             <item name="DOM" href="guide/dom.html"/>
             <item name="Class Reloading" href="guide/reload.html"/>
-            <item name="Unit testing pages/components" href="guide/unit-testing-pages.html"/>
+            <item name="Unit testing pages/components" href="guide/unit-testing-pages.html"/>
+            <item name="Logging" href="guide/logging.html"/>
         </menu> 
                         
         <menu ref="reports"/>

Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java?rev=573910&r1=573909&r2=573910&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry/internal/services/RenderQueueImplTest.java Sat Sep  8 14:28:40 2007
@@ -39,8 +39,9 @@
         MarkupWriter writer = mockMarkupWriter();
         RenderQueueImpl queue = new RenderQueueImpl(logger);
 
-        train_isDebugEnabled(logger, false);
-        train_isDebugEnabled(logger, false);
+        // There's only one check for trace enabled now.
+
+        train_isTraceEnabled(logger, false);
 
         command2.render(writer, queue);
 
@@ -75,7 +76,7 @@
         Logger logger = mockLogger();
         MarkupWriter writer = mockMarkupWriter();
 
-        train_isDebugEnabled(logger, false);
+        train_isTraceEnabled(logger, false);
 
         logger.error("Render queue error in FailedCommand: Oops.", t);
 

Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/test/IOCTestCase.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/test/IOCTestCase.java?rev=573910&r1=573909&r2=573910&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/test/IOCTestCase.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry/ioc/test/IOCTestCase.java Sat Sep  8 14:28:40 2007
@@ -340,6 +340,11 @@
         expect(log.isDebugEnabled()).andReturn(debugEnabled);
     }
 
+    protected final void train_isTraceEnabled(Logger log, boolean traceEnabled)
+    {
+        expect(log.isTraceEnabled()).andReturn(traceEnabled);
+    }
+
     protected final void train_matches(DecoratorDef decoratorDef, ServiceDef serviceDef,
             boolean matches)
     {
@@ -357,7 +362,8 @@
         expect(resource.toURL()).andReturn(url).atLeastOnce();
     }
 
-    protected final <T extends Annotation> void train_getAnnotation(AnnotationProvider annotationProvider, Class<T> annotationClass, T annotation)
+    protected final <T extends Annotation> void train_getAnnotation(
+            AnnotationProvider annotationProvider, Class<T> annotationClass, T annotation)
     {
         expect(annotationProvider.getAnnotation(annotationClass)).andReturn(annotation);
     }