More material for the (soon to be written) Cocoon hackers guide. :)


Logging in non-Cocoon Java Classes
----------------------------------

This explaines how to implement Cocoon-style logging, in a 
Java class that is not inherited from a Cocoon or Avalon 
component class. The class is however used within a Cocoon 
application. 

A typical use for this might be in a Java Bean used in a 
Cocoon application.

1. The class must extend AbstractLogEnabled.

2. You must enable logging in the class by calling the
   enableLogging() method on the class. This requires that you 
   have a Logger object to provide to enableLogging(). Generally 
   you can get the Logger from a Cocoon component class. In my 
   case I call enableLogging from a Cocoon action class, which 
   extends AbstractXMLFormAction.

The resulting code is as follows:

1. In the non-component class that needs to implement logging: 
   You simply call the appropriate log method using the Logger
   provided by the getLogger() method, which is available from 
   the parent class AbstractLogEnabled.

    import org.apache.avalon.framework.logger.AbstractLogEnabled;

    public class SomeClass extends AbstractLogEnabled {
 
      public void someMethod() {
        ...
        getLogger().debug( "Hello, log. It worked!" ); 
        getLogger().info(  "Hello, log. Here is info" ); 
        getLogger().error( "Hello, log. Here is an error" ); 
        //..etc.
        ...
      }
    }

2. In an Avalon component class, or a class that inherits from one:
   Call enableLogging(). Note that most of the Cocoon classes extend 
   Avalon Component classes.

      ...
      SomeClass myClass = new SomeClass();
      myClass.enableLogging( getLogger() );
      myClass.someMethod(); // Writes some log messages
      ...

Note that you must call enableLogging() before you call any methods 
that write log messages. It is not necessarily obvious when to call 
enableLogging() as the creation and initialization of many of your 
classes will be handled automatically by Avalon, one of the Cocoon
sub-systems.

To be absolutely sure that you are writing solid code, you'll need a
basic understanding of the Avalon component life-cycle. This is a big 
subject and beyond the scope of this short paper. You can read more 
at:

Avalon logkit, which is used by Cocoon:

  http://jakarta.apache.org/avalon/logkit/whitepaper.html

Avalon component lifecycle:

 
http://jakarta.apache.org/avalon/framework/reference-the-lifecycle.html

If you're still curious, here is a link to an excellent white paper 
explaining development using avalon:

  http://jakarta.apache.org/avalon/developing/index.html

..and that's all there is to it. 

Many thanks to Marcus Crafter and Judith Andres for their help.

Best wishes,

Alan.

---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <[EMAIL PROTECTED]>
For additional commands, e-mail:   <[EMAIL PROTECTED]>

Reply via email to