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]