carnold     2005/07/14 12:31:52

  Modified:    src/java/org/apache/log4j Tag: v1_2-branch
                        ConsoleAppender.java
  Log:
  Bug 31056: Apply fix to v1.2 branch
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.12.2.3  +89 -28    
logging-log4j/src/java/org/apache/log4j/ConsoleAppender.java
  
  Index: ConsoleAppender.java
  ===================================================================
  RCS file: 
/home/cvs/logging-log4j/src/java/org/apache/log4j/ConsoleAppender.java,v
  retrieving revision 1.12.2.2
  retrieving revision 1.12.2.3
  diff -u -r1.12.2.2 -r1.12.2.3
  --- ConsoleAppender.java      24 May 2005 05:06:17 -0000      1.12.2.2
  +++ ConsoleAppender.java      14 Jul 2005 19:31:51 -0000      1.12.2.3
  @@ -16,7 +16,8 @@
   
   package org.apache.log4j;
   
  -import java.io.OutputStreamWriter;
  +import java.io.IOException;
  +import java.io.OutputStream;
   import org.apache.log4j.helpers.LogLog;
   
   /**
  @@ -25,6 +26,7 @@
     * default target is <code>System.out</code>.
     *
     * @author Ceki G&uuml;lc&uuml; 
  +  * @author Curt Arnold
     * @since 1.1 */
   public class ConsoleAppender extends WriterAppender {
   
  @@ -34,25 +36,29 @@
     protected String target = SYSTEM_OUT;
   
     /**
  -     The default constructor does nothing.
  -   */
  +    * Constructs an unconfigured appender.
  +    */
     public ConsoleAppender() {
     }
   
  +    /**
  +     * Creates a configured appender.
  +     *
  +     * @param layout layout, may not be null.
  +     */
     public ConsoleAppender(Layout layout) {
       this(layout, SYSTEM_OUT);
     }
   
  +    /**
  +     *   Creates a configured appender.
  +     * @param layout layout, may not be null.
  +     * @param targetStr target, either "System.err" or "System.out".
  +     */
     public ConsoleAppender(Layout layout, String target) {
  -    this.layout = layout;
  -
  -    if (SYSTEM_OUT.equals(target)) {
  -      setWriter(new OutputStreamWriter(System.out));
  -    } else if (SYSTEM_ERR.equalsIgnoreCase(target)) {
  -      setWriter(new OutputStreamWriter(System.err));
  -    } else {
  -      targetWarn(target);
  -    }
  +    setLayout(layout);
  +    setTarget(target);
  +    activateOptions();
     }
   
     /**
  @@ -89,22 +95,77 @@
       LogLog.warn("Using previously set target, System.out by default.");
     }
   
  -  public
  -  void activateOptions() {
  -    if(target.equals(SYSTEM_OUT)) {
  -      setWriter(new OutputStreamWriter(System.out));
  -    } else {
  -      setWriter(new OutputStreamWriter(System.err));
  +  /**
  +    *   Prepares the appender for use.
  +    */
  +   public void activateOptions() {
  +        if (target.equals(SYSTEM_ERR)) {
  +            setWriter(createWriter(new SystemErrStream()));
  +        } else {
  +            setWriter(createWriter(new SystemOutStream()));
  +        }
  +
  +        super.activateOptions();
  +  }
  +
  +    /**
  +     * An implementation of OutputStream that redirects to the
  +     * current System.err.
  +     *
  +     */
  +    private static class SystemErrStream extends OutputStream {
  +        public SystemErrStream() {
  +        }
  +
  +        public void close() {
  +        }
  +
  +        public void flush() {
  +            System.err.flush();
  +        }
  +
  +        public void write(final byte[] b) throws IOException {
  +            System.err.write(b);
  +        }
  +
  +        public void write(final byte[] b, final int off, final int len)
  +            throws IOException {
  +            System.err.write(b, off, len);
  +        }
  +
  +        public void write(final int b) throws IOException {
  +            System.err.write(b);
  +        }
  +    }
  +
  +    /**
  +     * An implementation of OutputStream that redirects to the
  +     * current System.out.
  +     *
  +     */
  +    private static class SystemOutStream extends OutputStream {
  +        public SystemOutStream() {
  +        }
  +
  +        public void close() {
  +        }
  +
  +        public void flush() {
  +            System.out.flush();
  +        }
  +
  +        public void write(final byte[] b) throws IOException {
  +            System.out.write(b);
  +        }
  +
  +        public void write(final byte[] b, final int off, final int len)
  +            throws IOException {
  +            System.out.write(b, off, len);
  +        }
  +
  +        public void write(final int b) throws IOException {
  +            System.out.write(b);
  +        }
       }
  -  }
   
  -  /**
  -   *  This method overrides the parent [EMAIL PROTECTED]
  -   *  WriterAppender#closeWriter} implementation to do nothing because
  -   *  the console stream is not ours to close.
  -   * */
  -  protected
  -  final
  -  void closeWriter() {
  -  }
   }
  
  
  

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

Reply via email to