logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cakalic, James" <James.Caka...@Maritz.com>
Subject RE: ConsoleAppender and System.{out,err}.println
Date Wed, 23 Oct 2002 14:57:43 GMT
Every implementation of PrintStream (the class of System.out) that I have ever reviewed synchronized
on itself (the object) around the actual I/O. So all the public print, println, and flush
methods are synchronized. Whenever one of these methods is called, the output will be written
uninterrupted by another call. 

Any problem would be when multiple PrintStream calls are used to write the detail for a single
event seeing as each call would be independent (synchronization-wise) of every other call.
ConsoleAppender relies on its WriterAppender superclass implemetation of append which ultimately
makes one write call with the result of the layout format and then, if the layout ignoresThrowable,
gets a String[] representing the Throwable and writes each String with a separate write call
followed by a separate write of the LINE_SEPARATOR. So, depending on your layout, there could
be quite a variance of opportunity for a non-log4j writer to jump in.

An Appender introduces another level of synchronization so that multiple Loggers using the
same Appender cannot collide. So, if it is possible, the suggestion to use LoggingOutputStream
to replace the PrintStream represented by System.out (see the javadoc) is probably a good
way to minimize the collision between ConsoleAppender and System.out users. 

Of course, ultimately, you'll want to replace all the System.out calls :-)

Best regards,
Jim Cakalic

-----Original Message-----
From: Ceki Gülcü [mailto:ceki@qos.ch]
Sent: Tuesday, October 22, 2002 3:16 PM
To: Log4J Users List
Subject: Re: ConsoleAppender and System.{out,err}.println

AFAIK, System.out.println is synchronized.

At 16:19 22.10.2002 -0300, Daniel Serodio wrote:
>I'm maintaining a Java app with tons of System.out.println's all around,
>and I'm using log4j in my (new) code.
>If I setup log4j to use a ConsoleAppender, will log4j's and println's
>output be intermixed in a predictible way? I mean, will each log message
>be logged until EOL at least?
>Does anyone have any suggestions for using System.out.println and log4j
>together in the same app?
>Thanks in advance
>Daniel Serodio


TCP implementations will follow a general principle of robustness: be
conservative in what you do, be liberal in what you accept from
others. -- Jon Postel, RFC 793

To unsubscribe, e-mail:   <mailto:log4j-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:log4j-user-help@jakarta.apache.org>

<font size="1">Confidentiality Warning:  This e-mail contains information intended only
for the use of the individual or entity named above.  If the reader of this e-mail is not
the intended recipient or the employee or agent responsible for delivering it to the intended
recipient, any dissemination, publication or copying of this e-mail is strictly prohibited.
The sender does not accept any responsibility for any loss, disruption or damage to your data
or computer system that may occur while using data contained in, or transmitted with, this
e-mail.   If you have received this e-mail in error, please immediately notify us by return
e-mail.  Thank you.

To unsubscribe, e-mail:   <mailto:log4j-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:log4j-user-help@jakarta.apache.org>

View raw message