Oops.  Source code appended to this email.

-----Original Message-----
From: Liu, Ken (C) 
Sent: Friday, September 19, 2003 1:43 PM
To: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: ThrowableClassMatchFilter doesn't work with config files


Hi there -

I've been trying out the filters in jakarta-log4j-sandbox, and I've been
having trouble with the ThrowableClassMatchFilter.
...
-----------
/*
 *
============================================================================
 *                   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;
import org.apache.log4j.helpers.LogLog;


/**
 * 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 String throwableClass;

  /**
   * The Class instance corresponding to the throwable class param
   */
  private Class throwableClazz;

  /**
   * 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(String throwableClass) {
    this.throwableClass = throwableClass;
  }

  /**
   * Returns the throwable class
   * to match.
   *
   * @return Class
   */
  public String 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;
  }

  public void activateOptions() {
    super.activateOptions();
    try {
      throwableClazz = Class.forName(getThrowableClass());
    } catch (ClassNotFoundException cnfe) {
      LogLog.warn("Could not load Throwable class " + getThrowableClass());
    }
  }

  /**
   * 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 (throwableClazz.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