View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  package org.apache.log4j.chainsaw;
    18
    19  import java.net.InetAddress;
    20  import java.net.UnknownHostException;
    21
    22  import org.apache.log4j.Appender;
    23  import org.apache.log4j.AppenderSkeleton;
    24  import org.apache.log4j.helpers.Constants;
    25  import org.apache.log4j.helpers.OptionConverter;
    26  import org.apache.log4j.spi.LoggingEvent;
    27
    28
    29  /**
    30   * ChainsawAppender receives LoggingEvents from the local
    31   * Log4J environment, and appends them into a model that
    32   * can be used inside a Swing GUI
    33   * @author Paul Smith
    34   * @version 1.0
    35   */
    36  public class ChainsawAppender
    37      extends AppenderSkeleton{
    38
    39    private Appender appender;
    40
    41    /**
    42     * The in-JVM singleton instance of the ChainsawAppender.
    43     *
    44     * If somehow Log4j initialises more than one, then the first one to
    45     * initialise wins!
    46     */
    47    private static ChainsawAppender sSharedAppender = null;
    48
    49    /**
    50     * The classname of the viewer to create to view the events.
    51     */
    52    private String viewerClassname;
    53    private String hostname = "localhost";
    54    private String application = "app";
    55
    56    /**
    57     * Constructor, initialises the singleton instance of the appender
    58     */
    59    public ChainsawAppender() {
    60      super(false);
    61      synchronized (ChainsawAppender.class) {
    62        if (sSharedAppender == null) {
    63          sSharedAppender = this;
    64        }
    65      }
    66    }
    67
    68    /**
    69     * Return the singleton instance of the ChainsawAppender, it should only
    70     * be initialised once.
    71     * @return the One and only instance of the ChainsawAppender that is
    72     * allowed to be referenced by the GUI
    73     */
    74    static ChainsawAppender getInstance() {
    75      return sSharedAppender;
    76    }
    77
    78    /**
    79     * This appender does not require layout and so return false
    80     * @return false and only false
    81     */
    82    public boolean requiresLayout() {
    83      return false;
    84    }
    85
    86    public Appender getAppender() {
    87        return appender;
    88    }
    89
    90    public void setAppender(Appender appender) {
    91      this.appender = appender;
    92    }
    93
    94    /**
    95     * Appends the event
    96     * @param aEvent the LoggingEvent to append
    97     */
    98    protected void append(LoggingEvent aEvent) {
    99        if (hostname != null) {
    100         aEvent.setProperty(Constants.HOSTNAME_KEY, hostname);
    101       }
    102
    103       if (application != null) {
    104         aEvent.setProperty(Constants.APPLICATION_KEY, application);
    105       }
    106
    107       appender.doAppend(aEvent);
    108   }
    109
    110   /**
    111    * Instantiates and activates an instance of a ChainsawViewer
    112    * to view the contents of this appender.
    113    */
    114   public void activateOptions() {
    115     if (viewerClassname == null) {
    116       viewerClassname = "org.apache.log4j.chainsaw.DefaultViewer";
    117     }
    118
    119     ChainsawViewer viewer =
    120       (ChainsawViewer) OptionConverter.instantiateByClassName(viewerClassname,
    121         ChainsawViewer.class, null);
    122
    123     if (viewer != null) {
    124       viewer.activateViewer(this);
    125     }
    126     try {
    127       hostname = InetAddress.getLocalHost().getHostName();
    128     } catch (UnknownHostException uhe) {
    129       try {
    130         hostname = InetAddress.getLocalHost().getHostAddress();
    131       } catch (UnknownHostException uhe2) {
    132       }
    133     }
    134   }
    135
    136   /**
    137    * Close does nothing
    138    */
    139   public void close() {
    140   }
    141
    142   /**
    143    * Sets the viewer class to use to view the events.  The class must
    144    * implement the ChainsawViewer interface.
    145    *
    146    * @param classname The class name of the viewer class.
    147    */
    148   public void setViewerClass(String classname) {
    149     viewerClassname = classname;
    150   }
    151
    152   /**
    153    * Gets the viewer class to use to view the events.
    154    *
    155    * @return The class name of the viewer class.
    156    */
    157   public String getViewerClass() {
    158     return viewerClassname;
    159   }
    160
    161   /**
    162    * The <b>Application</b> option takes a string value which should be the
    163    * name of the application getting logged
    164    */
    165   public void setApplication(String lapp) {
    166     this.application = lapp;
    167   }
    168
    169   /**
    170    *  Returns value of the <b>Application</b> option.
    171    */
    172   public String getApplication() {
    173     return application;
    174   }
    175
    176
    177 }