You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@locus.apache.org on 2000/08/12 00:44:22 UTC

cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger Constants.java FileLogger.java LocalStrings.properties LoggerBase.java SystemErrLogger.java SystemOutLogger.java

craigmcc    00/08/11 15:44:22

  Added:       catalina/src/share/org/apache/catalina/logger Constants.java
                        FileLogger.java LocalStrings.properties
                        LoggerBase.java SystemErrLogger.java
                        SystemOutLogger.java
  Log:
  Migrate to Tomcat 4.0.
  
  Revision  Changes    Path
  1.1                  jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/Constants.java
  
  Index: Constants.java
  ===================================================================
  /*
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */ 
  
  
  package org.apache.catalina.logger;
  
  /**
   * Manifest constants for the <code>org.apache.catalina.logger</code>
   * package.
   *
   * @author Craig R. McClanahan
   */
  
  public class Constants {
  
      public static final String Package = "org.apache.catalina.logger";
  
  }
  
  
  
  1.1                  jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/FileLogger.java
  
  Index: FileLogger.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/FileLogger.java,v 1.1 2000/08/11 22:44:22 craigmcc Exp $
   * $Revision: 1.1 $
   * $Date: 2000/08/11 22:44:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */ 
  
  
  package org.apache.catalina.logger;
  
  
  import java.io.File;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.io.PrintWriter;
  import java.sql.Timestamp;
  import org.apache.catalina.Lifecycle;
  import org.apache.catalina.LifecycleEvent;
  import org.apache.catalina.LifecycleException;
  import org.apache.catalina.LifecycleListener;
  import org.apache.catalina.util.LifecycleSupport;
  import org.apache.catalina.util.StringManager;
  
  
  /**
   * Implementation of <b>Logger</b> that appends log messages to a file
   * named {prefix}.{date}.{suffix} in a configured directory, with an
   * optional preceding timestamp.
   *
   * @author Craig R. McClanahan
   * @version $Revision: 1.1 $ $Date: 2000/08/11 22:44:22 $
   */
  
  public final class FileLogger
      extends LoggerBase
      implements Lifecycle {
  
  
      // ----------------------------------------------------- Instance Variables
  
  
      /**
       * The as-of date for the currently open log file, or a zero-length
       * string if there is no open log file.
       */
      private String date = "";
  
  
      /**
       * The directory in which log files are created.
       */
      private String directory = "logs";
  
  
      /**
       * The descriptive information about this implementation.
       */
      protected static final String info =
  	"org.apache.catalina.logger.FileLogger/1.0";
  
  
      /**
       * The lifecycle event support for this component.
       */
      protected LifecycleSupport lifecycle = new LifecycleSupport(this);
  
  
      /**
       * The prefix that is added to log file filenames.
       */
      private String prefix = "catalina.";
  
  
      /**
       * The string manager for this package.
       */
      private StringManager sm =
  	StringManager.getManager(Constants.Package);
  
  
      /**
       * Has this component been started?
       */
      private boolean started = false;
  
  
      /**
       * The suffix that is added to log file filenames.
       */
      private String suffix = ".log";
  
  
      /**
       * Should logged messages be date/time stamped?
       */
      private boolean timestamp = false;
  
  
      /**
       * The PrintWriter to which we are currently logging, if any.
       */
      private PrintWriter writer = null;
  
  
      // ------------------------------------------------------------- Properties
  
  
      /**
       * Return the directory in which we create log files.
       */
      public String getDirectory() {
  
  	return (directory);
  
      }
  
  
      /**
       * Set the directory in which we create log files.
       *
       * @param directory The new log file directory
       */
      public void setDirectory(String directory) {
  
  	String oldDirectory = this.directory;
  	this.directory = directory;
  	support.firePropertyChange("directory", oldDirectory, this.directory);
  
      }
  
  
      /**
       * Return the log file prefix.
       */
      public String getPrefix() {
  
  	return (prefix);
  
      }
  
  
      /**
       * Set the log file prefix.
       *
       * @param prefix The new log file prefix
       */
      public void setPrefix(String prefix) {
  
  	String oldPrefix = this.prefix;
  	this.prefix = prefix;
  	support.firePropertyChange("prefix", oldPrefix, this.prefix);
  
      }
  
  
      /**
       * Return the log file suffix.
       */
      public String getSuffix() {
  
  	return (suffix);
  
      }
  
  
      /**
       * Set the log file suffix.
       *
       * @param suffix The new log file suffix
       */
      public void setSuffix(String suffix) {
  
  	String oldSuffix = this.suffix;
  	this.suffix = suffix;
  	support.firePropertyChange("suffix", oldSuffix, this.suffix);
  
      }
  
  
      /**
       * Return the timestamp flag.
       */
      public boolean getTimestamp() {
  
  	return (timestamp);
  
      }
  
  
      /**
       * Set the timestamp flag.
       *
       * @param timestamp The new timestamp flag
       */
      public void setTimestamp(boolean timestamp) {
  
  	boolean oldTimestamp = this.timestamp;
  	this.timestamp = timestamp;
  	support.firePropertyChange("timestamp", new Boolean(oldTimestamp),
  				   new Boolean(this.timestamp));
  
      }
  
  
      // --------------------------------------------------------- Public Methods
  
  
      /**
       * Writes the specified message to a servlet log file, usually an event
       * log.  The name and type of the servlet log is specific to the
       * servlet container.
       *
       * @param msg A <code>String</code> specifying the message to be written
       *  to the log file
       */
      public void log(String msg) {
  
  	// Construct the timestamp we will use, if requested
  	Timestamp ts = new Timestamp(System.currentTimeMillis());
  	String tsString = ts.toString().substring(0, 19);
  	String tsDate = tsString.substring(0, 10);
  
  	// If the date has changed, switch log files
  	if (!date.equals(tsDate)) {
  	    synchronized (this) {
  		close();
  		date = tsDate;
  		open();
  	    }
  	}
  
  	// Log this message, timestamped if necessary
  	if (writer != null) {
  	    if (timestamp) {
  		writer.print(tsString);
  		writer.print(" ");
  	    }
  	    writer.println(msg);
  	}
  
      }
  
  
      // -------------------------------------------------------- Private Methods
  
  
      /**
       * Close the currently open log file (if any)
       */
      private void close() {
  
  	if (writer == null)
  	    return;
  	writer.flush();
  	writer.close();
  	writer = null;
  	date = "";
  
      }
  
  
      /**
       * Open the new log file for the date specified by <code>date</code>.
       */
      private void open() {
  
  	// Create the directory if necessary
  	File dir = new File(directory);
  	if (!dir.isAbsolute())
  	    dir = new File(System.getProperty("catalina.home") +
  			   File.separator + directory);
  	dir.mkdirs();
  
  	// Open the current log file
  	try {
  	    String pathname = dir.getAbsolutePath() + File.separator +
  		prefix + date + suffix;
  	    writer = new PrintWriter(new FileWriter(pathname, true), true);
  	} catch (IOException e) {
  	    writer = null;
  	}
  
      }
  
  
      // ------------------------------------------------------ Lifecycle Methods
  
  
      /**
       * Add a lifecycle event listener to this component.
       *
       * @param listener The listener to add
       */
      public void addLifecycleListener(LifecycleListener listener) {
  
  	lifecycle.addLifecycleListener(listener);
  
      }
  
  
      /**
       * Remove a lifecycle event listener from this component.
       *
       * @param listener The listener to add
       */
      public void removeLifecycleListener(LifecycleListener listener) {
  
  	lifecycle.removeLifecycleListener(listener);
  
      }
  
  
      /**
       * Prepare for the beginning of active use of the public methods of this
       * component.  This method should be called after <code>configure()</code>,
       * and before any of the public methods of the component are utilized.
       *
       * @exception IllegalStateException if this component has already been
       *  started
       * @exception LifecycleException if this component detects a fatal error
       *  that prevents this component from being used
       */
      public void start() throws LifecycleException {
  
  	// Validate and update our current component state
  	if (started)
  	    throw new LifecycleException
  		(sm.getString("fileLogger.alreadyStarted"));
  	lifecycle.fireLifecycleEvent(START_EVENT, null);
  	started = true;
  
      }
  
  
      /**
       * Gracefully terminate the active use of the public methods of this
       * component.  This method should be the last one called on a given
       * instance of this component.
       *
       * @exception IllegalStateException if this component has not been started
       * @exception LifecycleException if this component detects a fatal error
       *  that needs to be reported
       */
      public void stop() throws LifecycleException {
  
  	// Validate and update our current component state
  	if (!started)
  	    throw new LifecycleException
  		(sm.getString("fileLogger.notStarted"));
  	lifecycle.fireLifecycleEvent(STOP_EVENT, null);
  	started = false;
  
  	close();
  
      }
  
  
  }
  
  
  
  
  1.1                  jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/LocalStrings.properties
  
  Index: LocalStrings.properties
  ===================================================================
  fileLogger.alreadyStarted=File Logger has already been started
  fileLogger.notStarted=File Logger has not yet been started
  tomcatLogger.alreadyStarted=Tomcat Logger has already been started
  tomcatLogger.notStarted=Tomcat Logger has not yet been started
  
  
  
  1.1                  jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/LoggerBase.java
  
  Index: LoggerBase.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/LoggerBase.java,v 1.1 2000/08/11 22:44:22 craigmcc Exp $
   * $Revision: 1.1 $
   * $Date: 2000/08/11 22:44:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */ 
  
  
  package org.apache.catalina.logger;
  
  
  import java.beans.PropertyChangeSupport;
  import java.beans.PropertyChangeListener;
  import java.io.CharArrayWriter;
  import java.io.PrintWriter;
  import javax.servlet.ServletException;
  import org.apache.catalina.Container;
  import org.apache.catalina.Logger;
  
  
  /**
   * Convenience base class for <b>Logger</b> implementations.  The only
   * method that must be implemented is <code>log(String msg)</code>, plus
   * any property setting and lifecycle methods required for configuration.
   *
   * @author Craig R. McClanahan
   * @version $Revision: 1.1 $ $Date: 2000/08/11 22:44:22 $
   */
  
  abstract class LoggerBase
      implements Logger {
  
  
      // ----------------------------------------------------- Instance Variables
  
  
      /**
       * The Container with which this Logger has been associated.
       */
      protected Container container = null;
  
  
      /**
       * The descriptive information about this implementation.
       */
      protected static final String info =
  	"org.apache.catalina.logger.LoggerBase/1.0";
  
  
      /**
       * The property change support for this component.
       */
      protected PropertyChangeSupport support = new PropertyChangeSupport(this);
  
  
      /**
       * The verbosity level for above which log messages may be filtered.
       */
      protected int verbosity = ERROR;
  
  
      // ------------------------------------------------------------- Properties
  
  
      /**
       * Return the Container with which this Logger has been associated.
       */
      public Container getContainer() {
  
  	return (container);
  
      }
  
  
      /**
       * Set the Container with which this Logger has been associated.
       *
       * @param container The associated Container
       */
      public void setContainer(Container container) {
  
  	Container oldContainer = this.container;
  	this.container = container;
  	support.firePropertyChange("container", oldContainer, this.container);
  
      }
  
  
      /**
       * Return descriptive information about this Logger implementation and
       * the corresponding version number, in the format
       * <code>&lt;description&gt;/&lt;version&gt;</code>.
       */
      public String getInfo() {
  
  	return (info);
  
      }
  
  
      /**
       * Return the verbosity level of this logger.  Messages logged with a
       * higher verbosity than this level will be silently ignored.
       */
      public int getVerbosity() {
  
  	return (this.verbosity);
  
      }
  
  
      /**
       * Set the verbosity level of this logger.  Messages logged with a
       * higher verbosity than this level will be silently ignored.
       *
       * @param verbosity The new verbosity level
       */
      public void setVerbosity(int verbosity) {
  
  	this.verbosity = verbosity;
  
      }
  
  
      /**
       * Set the verbosity level of this logger.  Messages logged with a
       * higher verbosity than this level will be silently ignored.
       *
       * @param verbosityLevel The new verbosity level, as a string
       */
      public void setVerbosityLevel(String verbosity) {
  
  	if ("FATAL".equalsIgnoreCase(verbosity))
  	    this.verbosity = FATAL;
  	else if ("ERROR".equalsIgnoreCase(verbosity))
  	    this.verbosity = ERROR;
  	else if ("WARNING".equalsIgnoreCase(verbosity))
  	    this.verbosity = WARNING;
  	else if ("INFORMATION".equalsIgnoreCase(verbosity))
  	    this.verbosity = INFORMATION;
  	else if ("DEBUG".equalsIgnoreCase(verbosity))
  	    this.verbosity = DEBUG;
  
      }
  
  
      // --------------------------------------------------------- Public Methods
  
  
      /**
       * Add a property change listener to this component.
       *
       * @param listener The listener to add
       */
      public void addPropertyChangeListener(PropertyChangeListener listener) {
  
  	support.addPropertyChangeListener(listener);
  
      }
  
  
      /**
       * Writes the specified message to a servlet log file, usually an event
       * log.  The name and type of the servlet log is specific to the
       * servlet container.  This message will be logged unconditionally.
       *
       * @param message A <code>String</code> specifying the message to be
       *  written to the log file
       */
      public abstract void log(String msg);
  
  
      /**
       * Writes the specified exception, and message, to a servlet log file.
       * The implementation of this method should call
       * <code>log(msg, exception)</code> instead.  This method is deprecated
       * in the ServletContext interface, but not deprecated here to avoid
       * many useless compiler warnings.  This message will be logged
       * unconditionally.
       *
       * @param exception An <code>Exception</code> to be reported
       * @param msg The associated message string
       */
      public void log(Exception exception, String msg) {
  
  	log(msg, exception);
  
      }
  
  
      /**
       * Writes an explanatory message and a stack trace for a given
       * <code>Throwable</code> exception to the servlet log file.  The name
       * and type of the servlet log file is specific to the servlet container,
       * usually an event log.  This message will be logged unconditionally.
       *
       * @param msg A <code>String</code> that describes the error or
       *  exception
       * @param throwable The <code>Throwable</code> error or exception
       */
      public void log(String msg, Throwable throwable) {
  
  	CharArrayWriter buf = new CharArrayWriter();
  	PrintWriter writer = new PrintWriter(buf);
  	writer.println(msg);
  	throwable.printStackTrace(writer);
  	if (throwable instanceof ServletException) {
  	    Throwable rootCause =
  		((ServletException) throwable).getRootCause();
  	    if (rootCause != null) {
  		writer.println("----- Root Cause -----");
  		rootCause.printStackTrace(writer);
  	    }
  	}
  
  	log(buf.toString());
  
      }
  
  
      /**
       * Writes the specified message to the servlet log file, usually an event
       * log, if the logger is set to a verbosity level equal to or higher than
       * the specified value for this message.
       *
       * @param message A <code>String</code> specifying the message to be
       *  written to the log file
       * @param verbosity Verbosity level of this message
       */
      public void log(String message, int verbosity) {
  
  	if (this.verbosity >= verbosity)
  	    log(message);
  
      }
  
  
      /**
       * Writes the specified message and exception to the servlet log file,
       * usually an event log, if the logger is set to a verbosity level equal
       * to or higher than the specified value for this message.
       *
       * @param message A <code>String</code> that describes the error or
       *  exception
       * @param throwable The <code>Throwable</code> error or exception
       * @param verbosity Verbosity level of this message
       */
      public void log(String message, Throwable throwable, int verbosity) {
  
  	if (this.verbosity >= verbosity)
  	    log(message, throwable);
  
      }
  
  
      /**
       * Remove a property change listener from this component.
       *
       * @param listener The listener to remove
       */
      public void removePropertyChangeListener(PropertyChangeListener listener) {
  
  	support.removePropertyChangeListener(listener);
  
      }
  
  
  }
  
  
  
  1.1                  jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/SystemErrLogger.java
  
  Index: SystemErrLogger.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/SystemErrLogger.java,v 1.1 2000/08/11 22:44:22 craigmcc Exp $
   * $Revision: 1.1 $
   * $Date: 2000/08/11 22:44:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */ 
  
  
  package org.apache.catalina.logger;
  
  
  /**
   * Simple implementation of <b>Logger</b> that writes to System.err.
   *
   * @author Craig R. McClanahan
   * @version $Revision: 1.1 $ $Date: 2000/08/11 22:44:22 $
   */
  
  public final class SystemErrLogger
      extends LoggerBase {
  
  
      // ----------------------------------------------------- Instance Variables
  
  
      /**
       * The descriptive information about this implementation.
       */
      protected static final String info =
  	"org.apache.catalina.logger.SystemErrLogger/1.0";
  
  
      // --------------------------------------------------------- Public Methods
  
  
      /**
       * Writes the specified message to a servlet log file, usually an event
       * log.  The name and type of the servlet log is specific to the
       * servlet container.
       *
       * @param msg A <code>String</code> specifying the message to be written
       *  to the log file
       */
      public void log(String msg) {
  
  	System.err.println(msg);
  
      }
  
  
  }
  
  
  
  1.1                  jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/SystemOutLogger.java
  
  Index: SystemOutLogger.java
  ===================================================================
  /*
   * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/logger/SystemOutLogger.java,v 1.1 2000/08/11 22:44:22 craigmcc Exp $
   * $Revision: 1.1 $
   * $Date: 2000/08/11 22:44:22 $
   *
   * ====================================================================
   *
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 1999 The Apache Software Foundation.  All rights 
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:  
   *       "This product includes software developed by the 
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written 
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   *
   * [Additional notices, if required by prior licensing conditions]
   *
   */ 
  
  
  package org.apache.catalina.logger;
  
  
  /**
   * Simple implementation of <b>Logger</b> that writes to System.out.
   * Because this component is so simple, no configuration is required.
   * Therefore, Lifecycle is not implemented.
   *
   * @author Craig R. McClanahan
   * @version $Revision: 1.1 $ $Date: 2000/08/11 22:44:22 $
   */
  
  public final class SystemOutLogger
      extends LoggerBase {
  
  
      // ----------------------------------------------------- Instance Variables
  
  
      /**
       * The descriptive information about this implementation.
       */
      protected static final String info =
  	"org.apache.catalina.logger.SystemOutLogger/1.0";
  
  
      // --------------------------------------------------------- Public Methods
  
  
      /**
       * Writes the specified message to a servlet log file, usually an event
       * log.  The name and type of the servlet log is specific to the
       * servlet container.
       *
       * @param msg A <code>String</code> specifying the message to be written
       *  to the log file
       */
      public void log(String msg) {
  
  	System.out.println(msg);
  
      }
  
  
  }