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);
}