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
    18  package org.apache.log4j.varia;
    19
    20  import org.apache.log4j.spi.Filter;
    21  import org.apache.log4j.spi.LoggingEvent;
    22  import org.apache.log4j.helpers.OptionConverter;
    23
    24  /**
    25   * This is a very simple filter based on string matching.
    26   *
    27   * <p>The filter admits two options <b>StringToMatch</b> and
    28   * <b>AcceptOnMatch</b>. If there is a match between the value of the
    29   * StringToMatch option and the message of the {@link org.apache.log4j.spi.LoggingEvent},
    30   * then the {@link #decide(LoggingEvent)} method returns {@link org.apache.log4j.spi.Filter#ACCEPT} if
    31   * the <b>AcceptOnMatch</b> option value is true, if it is false then
    32   * {@link org.apache.log4j.spi.Filter#DENY} is returned. If there is no match, {@link
    33   * org.apache.log4j.spi.Filter#NEUTRAL} is returned.
    34   *
    35   * @author Ceki G&uuml;lc&uuml;
    36   * @since 0.9.0
    37   */
    38  public class StringMatchFilter extends Filter {
    39
    40    /**
    41       @deprecated Options are now handled using the JavaBeans paradigm.
    42       This constant is not longer needed and will be removed in the
    43       <em>near</em> term.
    44     */
    45    public static final String STRING_TO_MATCH_OPTION = "StringToMatch";
    46
    47    /**
    48       @deprecated Options are now handled using the JavaBeans paradigm.
    49       This constant is not longer needed and will be removed in the
    50       <em>near</em> term.
    51     */
    52    public static final String ACCEPT_ON_MATCH_OPTION = "AcceptOnMatch";
    53
    54    boolean acceptOnMatch = true;
    55    String stringToMatch;
    56
    57    /**
    58       @deprecated We now use JavaBeans introspection to configure
    59       components. Options strings are no longer needed.
    60    */
    61    public
    62    String[] getOptionStrings() {
    63      return new String[] {STRING_TO_MATCH_OPTION, ACCEPT_ON_MATCH_OPTION};
    64    }
    65
    66    /**
    67       @deprecated Use the setter method for the option directly instead
    68       of the generic <code>setOption</code> method.
    69    */
    70    public
    71    void setOption(String key, String value) {
    72
    73      if(key.equalsIgnoreCase(STRING_TO_MATCH_OPTION)) {
    74        stringToMatch = value;
    75      } else if (key.equalsIgnoreCase(ACCEPT_ON_MATCH_OPTION)) {
    76        acceptOnMatch = OptionConverter.toBoolean(value, acceptOnMatch);
    77      }
    78    }
    79
    80    public
    81    void setStringToMatch(String s) {
    82      stringToMatch = s;
    83    }
    84
    85    public
    86    String getStringToMatch() {
    87      return stringToMatch;
    88    }
    89
    90    public
    91    void setAcceptOnMatch(boolean acceptOnMatch) {
    92      this.acceptOnMatch = acceptOnMatch;
    93    }
    94
    95    public
    96    boolean getAcceptOnMatch() {
    97      return acceptOnMatch;
    98    }
    99
    100   /**
    101      Returns {@link Filter#NEUTRAL} is there is no string match.
    102    */
    103   public
    104   int decide(LoggingEvent event) {
    105     String msg = event.getRenderedMessage();
    106
    107     if(msg == null ||  stringToMatch == null)
    108       return Filter.NEUTRAL;
    109
    110
    111     if( msg.indexOf(stringToMatch) == -1 ) {
    112       return Filter.NEUTRAL;
    113     } else { // we've got a match
    114       if(acceptOnMatch) {
    115 	return Filter.ACCEPT;
    116       } else {
    117 	return Filter.DENY;
    118       }
    119     }
    120   }
    121 }