Logging of Tapestry Components and Pages
Tapestry makes extensive use of SLF4J to log details about the creation and operation of your page and component classes.
The default configuration for logging uses Log4J as the logging toolkit, though 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:
Injecting Loggers
You may mark a field of type Logger with the @Inject annotation. The proper Logger for your page or component will be injected.
public class MyPage
{
@Inject
private Logger logger;
. . .
@Log annotation
You may mark any component method with the @Log annotation. Method entry, exit (and any thrown exceptions) will be logged at DEBUG level, along with parameter values and the method's return value. This is very convenient for debugging, especially when placed on event handler methods.
Component Transformation Debugging
Tapestry performs a transformation on your classes as they are loaded, often you want to gain insight into what it has done. Tapestry uses a secondary logger, consisting of the class name with the prefix "tapestry.transformer.", to log (at debug level) the results of transforming the class.
Example:
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.
Component Event Debugging
Tapestry can also debug component event logic. The component's logger, with a "tapestry.events." prefix, is used at debug level. The debugging output identifies the event name and event source, and identifies any methods that are invoked.
Note that events that are not handled by a component will bubble up to the component's container; further logging for the same event will occur using the logger associated with the container. The page containing the initial component is the final step when logging.
Examples:
Render Queue Debugging
Occasionally it is useful to get debugging output of all the steps involved in rendering a page. In Tapestry, rendering involves a series of rendering commands passed through a rendering queue (most commands will operate by queuing up additional commands). A rendering command may represent an element or attribute from a component template, or some template text, or it may represent one render phase when rendering a component.
The logger is the page's logger prefixed with "tapestry.render.".
This debugging is most useful when you get a rendering exception about unbalanced open and close tags.
Most logging is at the trace level, except for a debug-level entry at the end identifying the number of commands and the elapsed time.