Chris, thanks for the submission.  I have not had a chance to review, but I
hope to soon.  Anyone else have comments?

-Mark

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> Sent: Monday, January 20, 2003 5:11 PM
> To: Log4J Developers List
> Cc: [EMAIL PROTECTED]
> Subject: Proposed architecture changes to log4j for improved memory
> usage
>
>
>
> I sent an e-mail with this subject several months ago.  That e-mail
> described the changes I made to a Log4J 1.1.3 base for a customer I was
> working at.  There was alot of interest in the changes I described.
> Unfortunately the client would not allow me to release the code changes
> back to the open source group.
>
> I finally got around to refactoring these changes into 1.2.7.
> They are not
> fully tested and should be considered a prototype.  It does not
> contain all
> of the changes I described in my last e-mail.  This refactoring replaces
> the use of StringBuffer with Writer.  I tested with
> DailyRollingFileAppender.  Instead of writing an extra copy in memory to a
> StringBuffer it is written to the QuietWriter, which is backed by a
> BufferedWriter in DailyRollingFileAppender.  This is a win in speed(one
> less copy) and in memory(there is no StringBuffer).
>
> Here are a list of the files changed:
>
> Layout:  Adds "stream(LoggingEvent, Writer)" to replace
> "format(LoggingEvent)".  This is where the proposed change uses
> less memory
> by using a writer instead of a StringBuffer.
>
> PatternLayout, SimpleLayout, TTCCLayout, XMLLayout:
> The "stream" method looks very similar to format where
> sb.append(string) is
> replaced with out.write(string).
>
> HTMLLayout:
> Also adds a HTMLThrowablePrintWriter.  Better memory usage and shorter
> execution path than using ThrowableInformation.getThrowableStrRep(..).
> Questionable if using multiple appenders.
>
> PatternConverter:  Adds "format(LoggingEvent, Writer)" to replace
> "format(StringBuffer, LoggingEvent)" and "convert(LoggingEvent,
> Writer)" to
> replace "convert(LoggingEvent)".  Responsibility to output
> pattern falls to
> convert method.  Convinience method added to format String to a
> Writer, was
> done in "format" but now this is called from "convert" method.
>
> PatternParser:  Inner classes extending PatternConverter have new format
> method
>
>
> WriterAppender:  Changed to use the new "stream" method from
> layout passing
> in the QuietWriter.  Instead of using ThrowableInformation to get
> the stack
> trace, Throwable.printStackTrace is called directly.
>
> FileAppender:  Changed to delegate creation of QuietWriter to
> WriterAppender.  WriterAppender has a new PrintWriter set up at the same
> time and needs to be notified when the QuietWriter is created.
>
>
>
>
> If an appender needs a "String" from the layout it could send in a
> "StringWriter" and basically have the same end result as using a
> StringBuffer.
>
> If there's more interest in these changes I'm willing to talk about them.
>
> (See attached file: log4j_1.2.7_updates.zip)
>
> Chris Nokes
> Perficient, Inc
>


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

Reply via email to