    001    /* ========================================================================
    002     * JCommon : a free general purpose class library for the Java(tm) platform
    003     * ========================================================================
    004     *
    005     * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
    006     *
    007     * Project Info:  http://www.jfree.org/jcommon/index.html
    008     *
    009     * This library is free software; you can redistribute it and/or modify it
    010     * under the terms of the GNU Lesser General Public License as published by
    011     * the Free Software Foundation; either version 2.1 of the License, or
    012     * (at your option) any later version.
    013     *
    014     * This library is distributed in the hope that it will be useful, but
    015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
    016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
    017     * License for more details.
    018     *
    019     * You should have received a copy of the GNU Lesser General Public
    020     * License along with this library; if not, write to the Free Software
    021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
    022     * USA.
    023     *
    024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
    025     * in the United States and other countries.]
    026     *
    027     * -------------------------
    028     * PrintStreamLogTarget.java
    029     * -------------------------
    030     * (C)opyright 2003-2005, by Thomas Morgner and Contributors.
    031     *
    032     * Original Author:  Thomas Morgner;
    033     * Contributor(s):   David Gilbert (for Object Refinery Limited);
    034     *
    035     * $Id: PrintStreamLogTarget.java,v 1.6 2005/10/18 13:24:19 mungady Exp $
    036     *
    037     * Changes
    038     * -------
    039     * 02-Dec-2003 : Initial version
    040     * 11-Feb-2004 : Added missing Javadocs (DG);
    041     *
    042     */
    043
    044    package org.jfree.util;
    045
    046    import java.io.PrintStream;
    047    import java.io.Serializable;
    048
    049    /**
    050     * A log target that sends output to a {@link PrintStream}.
    051     *
    052     * @author Thomas Morgner
    053     */
    054    public class PrintStreamLogTarget implements LogTarget, Serializable {
    055
    056      /** For serialization. */
    057      private static final long serialVersionUID = 6510564403264504688L;
    058
    059      /** The printstream we use .. */
    060      private PrintStream printStream;
    061
    062      /**
    063       * The default constructor. Initializes this target with the system.out
    064       * stream.
    065       * <p>
    066       * All {@link org.jfree.util.LogTarget} implementations need a default
    067       * constructor.
    068       */
    069      public PrintStreamLogTarget() {
    070        this (System.out);
    071      }
    072
    073      /**
    074       * The default constructor. Initializes this target with the given stream.
    075       * <p>
    076       * @param printStream the print stream that is used to write the content.
    077       */
    078      public PrintStreamLogTarget(final PrintStream printStream) {
    079        if (printStream == null) {
    080          throw new NullPointerException();
    081        }
    082        this.printStream = printStream;
    083      }
    084
    085      /**
    086       * Logs a message to the main log stream. All attached logStreams will also
    087       * receive this message. If the given log-level is higher than the given
    088       * debug-level in the main config file, no logging will be done.
    089       *
    090       * @param level log level of the message.
    091       * @param message text to be logged.
    092       */
    093      public void log(int level, final Object message) {
    094        if (level > 3) {
    095          level = 3;
    096        }
    097        this.printStream.print(LEVELS[level]);
    098        this.printStream.println(message);
    099        if (level < 3) {
    100          System.out.flush();
    101        }
    102      }
    103
    104      /**
    105       * logs an message to the main-log stream. All attached logStreams will also
    106       * receive this message. If the given log-level is higher than the given
    107       * debug-level in the main config file, no logging will be done.
    108       *
    109       * The exception's stacktrace will be appended to the log-stream
    110       *
    111       * @param level log level of the message.
    112       * @param message text to be logged.
    113       * @param e the exception, which should be logged.
    114       */
    115      public void log(int level, final Object message, final Exception e) {
    116        if (level > 3) {
    117          level = 3;
    118        }
    119        this.printStream.print(LEVELS[level]);
    120        this.printStream.println(message);
    121        e.printStackTrace(this.printStream);
    122        if (level < 3) {
    123          System.out.flush();
    124        }
    125      }
    126    }