That worked.  This is an incredibly useful add-on.  Thanks for your help.

-Robin

--- James Stauffer <[EMAIL PROTECTED]> wrote:

> Try something like Level.error or Level.ERROR.
> 
> On 2/23/07, Robin Walker <[EMAIL PROTECTED]> wrote:
> > Hello,
> >
> > Looking online, I found this neat bit of code and am trying to use it to 
> > send
> STDERR
> > to log4j so we can log all System.err using log4j.  Trouble is, it requires 
> > both
> a
> > Logger and Level to be passed into the constructor and I'm a bit confused 
> > with
> > regards to the "Level".
> >
> > #1 - I'm not clear on what this could represent besides logger.getLevel(), 
> > so it
> > seems redundant to me.  Granted, I am not an experienced log4j user.
> >
> > #2 - If I do pass in logger.getLevel(), this code snippet errors out because
> level
> > appears to be set to null.
> >
> > #3 - Instantiating a new org.apache.log4j.Level() object doesn't seem 
> > feasible
> for
> > reasons that I don't quite understand but probably are apparent to the more
> > experienced.
> >
> > Below is the code snippet.  Does anyone have any ideas, or other experiences
> trying
> > to accomplish this sort of thing?
> >
> > Much thanks,
> >
> > -Robin
> >
> > import java.io.IOException;
> > import java.io.OutputStream;
> > import java.io.PrintStream;
> >
> > import org.apache.log4j.Level;
> > import org.apache.log4j.Logger;
> >
> > /**
> > * An OutputStream that flushes out to a Category.<p>
> > * <p/>
> > * Note that no data is written out to the Category until the stream is
> > * flushed or closed.<p>
> > * <p/>
> > * Example:<pre>
> > * // make sure everything sent to System.err is logged
> > * System.setErr(new PrintStream(new
> > * JscLoggingOutputStream(Category.getRoot(),
> > * Priority.WARN), true));
> > * <p/>
> > * // make sure everything sent to System.out is also logged
> > * System.setOut(new PrintStream(new
> > * JscLoggingOutputStream(Category.getRoot(),
> > * Priority.INFO), true));
> > * </pre>
> > *
> > * @author <a href="mailto://[EMAIL PROTECTED]">Jim Moore</a>
> > * @see Category
> > */
> >
> > //
> > public class JscLoggingOutputStream extends OutputStream {
> >
> > static Logger myLogger =
> Logger.getLogger(JscLoggingOutputStream.class.getName());
> >
> >  /**
> >   * Used to maintain the contract of [EMAIL PROTECTED] #close()}.
> >   */
> >  protected boolean hasBeenClosed = false;
> >
> >  /**
> >   * The internal buffer where data is stored.
> >   */
> >  protected byte[] buf;
> >
> >  /**
> >   * The number of valid bytes in the buffer. This value is always
> >   * in the range <tt>0</tt> through <tt>buf.length</tt>; elements
> >   * <tt>buf[0]</tt> through <tt>buf[count-1]</tt> contain valid
> >   * byte data.
> >   */
> >  protected int count;
> >
> >  /**
> >   * Remembers the size of the buffer for speed.
> >   */
> >  private int bufLength;
> >
> >  /**
> >   * The default number of bytes in the buffer. =2048
> >   */
> >  public static final int DEFAULT_BUFFER_LENGTH = 2048;
> >
> >
> >  /**
> >   * The category to write to.
> >   */
> >  protected Logger logger;
> >
> >  /**
> >   * The priority to use when writing to the Category.
> >   */
> >  protected Level level;
> >
> >
> >  private JscLoggingOutputStream() {
> >    // illegal
> >  }
> >
> >
> >  /**
> >   * Creates the JscLoggingOutputStream to flush to the given Category.
> >   *
> >   * @param log      the Logger to write to
> >   * @param level the Level to use when writing to the Logger
> >   * @throws IllegalArgumentException if cat == null or priority ==
> >   * null
> >   */
> >  public JscLoggingOutputStream(Logger log, Level level)
> >  throws IllegalArgumentException {
> >
> >          System.out.println("we're in here...");
> >          System.out.println("we're in here...");
> >          System.out.println("we're in here...");
> >          System.out.println("we're in here...");
> >          System.out.println("we're in here...");
> >
> >    if (log == null) {
> >          System.out.println("error 1");
> >
> >      throw new IllegalArgumentException("cat == null");
> >    }
> >    if (level == null) {
> >            System.out.println("error 2");
> >      throw new IllegalArgumentException("priority == null");
> >    }
> >
> > this.level = level;
> >
> >    logger = log;
> >    bufLength = DEFAULT_BUFFER_LENGTH;
> >    buf = new byte[DEFAULT_BUFFER_LENGTH];
> >    count = 0;
> >  }
> >
> >
> >  /**
> >   * Closes this output stream and releases any system resources
> >   * associated with this stream. The general contract of
> >   * <code>close</code>
> >   * is that it closes the output stream. A closed stream cannot
> >   * perform
> >   * output operations and cannot be reopened.
> >   */
> >  public void close() {
> >    flush();
> >    hasBeenClosed = true;
> >  }
> >
> >
> >  /**
> >   * Writes the specified byte to this output stream. The general
> >   * contract for <code>write</code> is that one byte is written
> >   * to the output stream. The byte to be written is the eight
> >   * low-order bits of the argument <code>b</code>. The 24
> >   * high-order bits of <code>b</code> are ignored.
> >   *
> >   * @param b the <code>byte</code> to write
> >   * @throws IOException if an I/O error occurs. In particular,
> >   *                     an <code>IOException</code> may be thrown if
> >   * the
> >   *                     output stream has been closed.
> >   */
> >  public void write(final int b) throws IOException {
> >    if (hasBeenClosed) {
> >      throw new IOException("The stream has been closed.");
> >    }
> >
> > // would this be writing past the buffer?
> >
> >    if (count == bufLength) {
> >      // grow the buffer
> >      final int newBufLength = bufLength + DEFAULT_BUFFER_LENGTH;
> >      final byte[] newBuf = new byte[newBufLength];
> >
> > System.arraycopy(buf, 0, newBuf, 0, bufLength); buf = newBuf;
> >
> >      bufLength = newBufLength;
> >    }
> >
> > buf[count] = (byte) b;
> >
> >    count++;
> >  }
> >
> >
> >  /**
> >   * Flushes this output stream and forces any buffered output bytes
> >   * to be written out. The general contract of <code>flush</code> is
> >   * that calling it is an indication that, if any bytes previously
> >   * written have been buffered by the implementation of the output
> >   * stream, such bytes should immediately be written to their
> >   * intended destination.
> >   */
> >  public void flush() {
> >
> > if (count == 0) {
> >
> >      return;
> >    }
> >
> > // don't print out blank lines; flushing from PrintStream puts
> >
> >    // out these
> >
> > // For linux system
> > /*
> >    if (count == 1 && ((char) buf[0]) == '\n') {
> >      reset();
> >      return;
> >    }
> >
> > // For mac system
> >
> >    if (count == 1 && ((char) buf[0]) == '\r') {
> >      reset();
> >      return;
> >    }
> > */
> > // On windows system
> >
> >    if (count==2 && (char)buf[0]=='\r' && (char)buf[1]=='\n') {
> >      reset();
> >      return;
> >    }
> >
> > final byte[] theBytes = new byte[count]; System.arraycopy(buf, 0, theBytes, 
> > 0,
> > count); logger.log(level, new String(theBytes)); reset();
> >
> >  }
> >
> >
> >  private void reset() {
> >    // not resetting the buffer -- assuming that if it grew then it
> >    //   will likely grow similarly again
> >    count = 0;
> >  }
> >
> > }
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> 
> -- 
> James Stauffer        http://www.geocities.com/stauffer_james/
> Are you good? Take the test at http://www.livingwaters.com/good/
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


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

Reply via email to