yoavs       2003/06/06 19:31:49

  Added:       src/java/org/apache/log4j/filter
                        ThrowableClassMatchFilter.java
  Log:
  - Initial version of ThrowableClassMatchFilter
  
  Revision  Changes    Path
  1.1                  
jakarta-log4j-sandbox/src/java/org/apache/log4j/filter/ThrowableClassMatchFilter.java
  
  Index: ThrowableClassMatchFilter.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 modifica-
   * tion, 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  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" 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
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * 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 (INCLU-
   * DING, 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/>.
   *
   */
  
  package org.apache.log4j.filter;
  
  import org.apache.log4j.spi.LoggingEvent;
  import org.apache.log4j.spi.ThrowableInformation;
  
  
  /**
   * ThrowableClassMatchFiler matches a configured throwable
   * instance name (e.g. java.io.IOException) against the
   * Throwable, if any, in a logging event.
   *
   * <p>The filter admits two options <b>ThrowableClass</b> and
   * <b>IncludeSubclass</b>.
   *
   * <p><b>ThrowableClass<b> is the exception class to match.  If
   * the <b>IncludeSubclasses</b> option is set to true, subclasses
   * of the <b>ThrowableClass</b> will be considered a match.
   *
   * <p>For more information about how the logging event will be
   * passed to the appender for reporting, please see
   * the [EMAIL PROTECTED] MatchFilterBase} class.
   *
   * @author Yoav Shapira <[EMAIL PROTECTED]>
   *
   * @since 1.3
   */
  public class ThrowableClassMatchFilter extends MatchFilterBase {
    /**
     * The throwable class to match.
     */
    private Class throwableClass;
    
    /**
     * Whether subclasses of ThrowableClass
     * should count as a match.
     */
    private boolean includeSubclasses = true;
  
    /**
     * Sets the throwable class to match.
     *
     * @param throwableClass The throwable class
     */
    public void setThrowableClass(Class throwableClass) {
      this.throwableClass = throwableClass;
    }
  
    /**
     * Returns the throwable class
     * to match.
     *
     * @return Class
     */
    public Class getThrowableClass() {
      return throwableClass;
    }
  
    /** 
     * Sets whether subclasses of the throwableClass
     * will match the filter or not.
     *
     * @param includeSubclasses True if subclasses match
     */
    public void setIncludeSubclasses(boolean includeSubclasses) {
      this.includeSubclasses = includeSubclasses;
    }
  
    /**
     * Returns whether subclasses of the throwableClass
     * are included as a match.
     *
     * @return True if subclasses match
     */
    public boolean getIncludeSubclasses() {
      return includeSubclasses;
    }
  
    /**
     * Checks the given event to see if it has
     * a throwable.  If a throwable is present and its
     * class exactly matches that of the <b>throwableClass</b>
     * property, this method returns true.  If 
     * <b>includeSubclasses</b> is set to true and the
     * throwable is a subclass of <b>throwableClass<b>, then
     * this method also returns true.
     *
     * @param event The logging event
     * @return boolean True if matches criteria
     */ 
    protected boolean match(LoggingEvent event) {
      ThrowableInformation ti = event.getThrowableInformation();
  
      if(ti == null) {
        return false;
      } else {
        Throwable throwable = ti.getThrowable();
      
        if(throwable == null) {
          return false;
        } else {
          if(throwable.getClass().equals(getThrowableClass())) {
            return true;
          } else if(getIncludeSubclasses()) { 
            return (getThrowableClass().isInstance(throwable));
          } else {
            return false;
          }
        }
      }              
    }
  }
  
  
  // End of class: ThrowableClassMatchFilter.java
  
  

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

Reply via email to