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ülcü 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 }