ceki        02/05/20 02:25:47

  Added:       src/java/org/apache/log4j/varia LevelRangeFilter.java
  Log:
  Added missing LevelRangeFilter.java. This file was in the 1.2 distribution
  but not in CVS.
  
  Revision  Changes    Path
  1.1                  
jakarta-log4j/src/java/org/apache/log4j/varia/LevelRangeFilter.java
  
  Index: LevelRangeFilter.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software License
   * version 1.1, a copy of which has been included  with this distribution in
   * the LICENSE.APL file.
   */
  
  package org.apache.log4j.varia;
  
  import org.apache.log4j.Level;
  import org.apache.log4j.spi.Filter;
  import org.apache.log4j.spi.LoggingEvent;
  import org.apache.log4j.helpers.LogLog;
  import org.apache.log4j.helpers.OptionConverter;
  
  /**
     This is a very simple filter based on level matching, which can be
     used to reject messages with priorities outside a certain range.
     
     <p>The filter admits three options <b>LevelMin</b>, <b>LevelMax</b>
     and <b>AcceptOnMatch</b>.
  
     <p>If the level of the {@link LoggingEvent} is not between Min and Max
     (inclusive), then {@link Filter#DENY} is returned.
     
     <p> If the Logging event level is within the specified range, then if
     <b>AcceptOnMatch</b> is true, {@link Filter#ACCEPT} is returned, and if
     <b>AcceptOnMatch</b> is false, {@link Filter#NEUTRAL} is returned.
     
     <p>If <code>LevelMin</code>w is not defined, then there is no
     minimum acceptable level (ie a level is never rejected for
     being too "low"/unimportant).  If <code>LevelMax</code> is not
     defined, then there is no maximum acceptable level (ie a
     level is never rejected for beeing too "high"/important).
  
     <p>Refer to the {@link
     org.apache.log4j.AppenderSkeleton#setThreshold setThreshold} method
     available to <code>all</code> appenders extending {@link
     org.apache.log4j.AppenderSkeleton} for a more convenient way to
     filter out events by level.
  
     @author Simon Kitching
     @author based on code by Ceki G&uuml;lc&uuml; 
  */
  public class LevelRangeFilter extends Filter {
  
    /**
       Do we return ACCEPT when a match occurs. Default is
       <code>false</code>, so that later filters get run by default  */
    boolean acceptOnMatch = false;
  
    Level levelMin;
    Level levelMax;
  
   
    /**
       Return the decision of this filter.
     */
    public
    int decide(LoggingEvent event) {
      if(this.levelMin != null) {
        if (event.level.isGreaterOrEqual(levelMin) == false) {
          // level of event is less than minimum
          return Filter.DENY;
        }
      }
  
      if(this.levelMax != null) {
        if (event.level.toInt() > levelMax.toInt()) {
          // level of event is greater than maximum
          // Alas, there is no Level.isGreater method. and using
          // a combo of isGreaterOrEqual && !Equal seems worse than
          // checking the int values of the level objects..
          return Filter.DENY;
        }
      }
  
      if (acceptOnMatch) {
        // this filter set up to bypass later filters and always return
        // accept if level in range
        return Filter.ACCEPT;
      }
      else {
        // event is ok for this filter; allow later filters to have a look..
        return Filter.NEUTRAL;
      }
    }
  
   /**
       Get the value of the <code>LevelMax</code> option.  */
    public
    Level getLevelMax() {
      return levelMax;
    }
  
  
    /**
       Get the value of the <code>LevelMin</code> option.  */
    public
    Level getLevelMin() {
      return levelMin;
    }
  
    /**
       Get the value of the <code>AcceptOnMatch</code> option.
     */
    public
    boolean getAcceptOnMatch() {
      return acceptOnMatch;
    }
  
    /**
       Set the <code>LevelMax</code> option.
     */
    public
    void setLevelMax(Level levelMax) {
      this.levelMax =  levelMax;
    }
  
    /**
       Set the <code>LevelMin</code> option.
     */
    public
    void setLevelMin(Level levelMin) {
      this.levelMin =  levelMin;
    }
  
    /**
       Set the <code>AcceptOnMatch</code> option.
     */  
    public 
    void setAcceptOnMatch(boolean acceptOnMatch) {
      this.acceptOnMatch = acceptOnMatch;
    }
  
  
    /**
       @deprecated We now use JavaBeans introspection to configure
       components. 
     */
    public
    String[] getOptionStrings() {
      return new String[] {
        LEVEL_MIN_OPTION,
        LEVEL_MAX_OPTION,
        ACCEPT_ON_MATCH_OPTION};
    }
  
    /**
       @deprecated We now use JavaBeans introspection to configure
       components. 
     */
    public
    void setOption(String key, String value) {
      if(key.equalsIgnoreCase(LEVEL_MIN_OPTION)) {
        levelMin = OptionConverter.toLevel(value, null);
      }
      else if (key.equalsIgnoreCase(LEVEL_MAX_OPTION)) {
        levelMax = OptionConverter.toLevel(value, null);
      }
      else if (key.equalsIgnoreCase(ACCEPT_ON_MATCH_OPTION)) {
        acceptOnMatch = OptionConverter.toBoolean(value, acceptOnMatch);
      }
    }
  
    /** See class comments  */
    public static final String LEVEL_MIN_OPTION = "LevelMin";
  
    /** See class comments  */
    public static final String LEVEL_MAX_OPTION = "LevelMax";
  
    /** See class comments  */
    public static final String ACCEPT_ON_MATCH_OPTION = "AcceptOnMatch";
  }
  
  
  
  

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

Reply via email to