As you have noticed, my last commit changed the interface of the Layout class.


Layouts now write directly to the output stream of the appender which is much more efficient than creating a new sting for each token in the conversion pattern. This change has been discussed a long time ago.

Please see:

http://marc.theaimsgroup.com/?l=log4j-dev&m=103366188809758&w=2
http://marc.theaimsgroup.com/?t=104024394800001&r=1&w=2


Your comments/suggestions most welcome.


At 04:04 PM 6/23/2003 +0000, you wrote:
ceki 2003/06/23 09:04:31

  Modified:    src/java/org/apache/log4j SimpleLayout.java HTMLLayout.java
                        TTCCLayout.java LogManager.java PatternLayout.java
                        Layout.java
               tests/src/java/org/apache/log4j MyPatternLayout.java
                        MyPatternParser.java
               src/java/org/apache/log4j/helpers DateLayout.java
                        Transform.java
               examples MyPatternLayout.java MyPatternParser.java
               tests    build.xml
               src/java/org/apache/log4j/xml XMLLayout.java
  Added:       src/java/org/apache/log4j/pattern
                        RelativeTimePatternConverter.java
                        FormattingInfo.java NamedPatternConverter.java
                        DatePatternConverter.java
                        LiteralPatternConverter.java
                        LevelPatternConverter.java MDCPatternConverter.java
                        FileLocationPatternConverter.java
                        MethodLocationPatternConverter.java
                        NDCPatternConverter.java
                        ClassNamePatternConverter.java
                        LineLocationPatternConverter.java
                        MessagePatternConverter.java PatternConverter.java
                        FullLocationPatternConverter.java
                        PatternParser.java LoggerPatternConverter.java
                        ThreadPatternConverter.java
  Removed:     src/java/org/apache/log4j/helpers PatternConverter.java
                        PatternParser.java FormattingInfo.java
  Log:

This is quite a massive commit. Here is a short summary:

  - The o.a.l.helpers.PatternParser class has been moved to
   o.a.l.pattern package.

  Many of the small PatternConverter classes contained in
  PatternParser.java  file have been taken out  and placed in
  o.a.l.pattern package as  independent class files.

The Layout class has changed. A new method

void format(Writer output, LoggingEvent event)

  has been added. Instead of returning a String, Layouts now write
  directly to the output stream. This significantly improves performance,
  in particular by avoiding the  creation of many temporary strings.

The method

String format(LoggingEvent event)

  in Layout is kept around for compatibility. This method is now
  implemented in terms of the format(Writer, LoggingEvent) variant
  where Writer is a CharArrayWriter.

The changes pass the existing unit tests.





  Index: Layout.java
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/src/java/org/apache/log4j/Layout.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Layout.java       18 Mar 2003 21:17:42 -0000      1.6
  +++ Layout.java       23 Jun 2003 16:04:25 -0000      1.7
  @@ -49,6 +49,10 @@

package org.apache.log4j;

  +import java.io.CharArrayWriter;
  +import java.io.IOException;
  +import java.io.Writer;
  +
   import org.apache.log4j.spi.LoggingEvent;
   import org.apache.log4j.spi.OptionHandler;

@@ -64,11 +68,25 @@
// applets.
public static final String LINE_SEP = System.getProperty("line.separator");
public static final int LINE_SEP_LEN = LINE_SEP.length();
+
+ final static Logger logger = Logger.getLogger(Layout.class);


+ public CharArrayWriter charArrayWriter = new CharArrayWriter(1024);
/**
Implement this method to create your own layout format.
*/
- public abstract String format(LoggingEvent event);
+ public String format(LoggingEvent event) {
+ charArrayWriter.reset();
+ try {
+ format(charArrayWriter, event);
+ } catch(IOException ie) {
+ // There cannot be an IoException while writing to a CharArrayWriter
+ logger.error("Unexpected IOException while writing to CharArrayWriter", ie);
+ }
+ return charArrayWriter.toString();
+ }
+
+ public abstract void format(Writer output, LoggingEvent event) throws IOException;


     /**
        Returns the content type output by this layout. The base class



1.2 +1 -1 jakarta-log4j/tests/src/java/org/apache/log4j/MyPatternLayout.java


--
Ceki For log4j documentation consider "The complete log4j manual"
ISBN: 2970036908 http://www.qos.ch/shop/products/clm_t.jsp



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



Reply via email to