001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache license, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the license for the specific language governing permissions and 015 * limitations under the license. 016 */ 017package org.apache.logging.log4j.core.filter; 018 019import org.apache.logging.log4j.Level; 020import org.apache.logging.log4j.Marker; 021import org.apache.logging.log4j.core.Filter; 022import org.apache.logging.log4j.core.LogEvent; 023import org.apache.logging.log4j.core.Logger; 024import org.apache.logging.log4j.core.config.Node; 025import org.apache.logging.log4j.core.config.plugins.Plugin; 026import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute; 027import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory; 028import org.apache.logging.log4j.message.Message; 029import org.apache.logging.log4j.util.PerformanceSensitive; 030 031/** 032 * This filter returns the onMatch result if the logging level in the event matches the specified logging level 033 * exactly. 034 */ 035@Plugin(name = "StringMatchFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true) 036@PerformanceSensitive("allocation") 037public final class StringMatchFilter extends AbstractFilter { 038 039 public static final String ATTR_MATCH = "match"; 040 private final String text; 041 042 private StringMatchFilter(final String text, final Result onMatch, final Result onMismatch) { 043 super(onMatch, onMismatch); 044 this.text = text; 045 } 046 047 @Override 048 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 049 final Object... params) { 050 return filter(logger.getMessageFactory().newMessage(msg, params).getFormattedMessage()); 051 } 052 053 @Override 054 public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg, 055 final Throwable t) { 056 return filter(logger.getMessageFactory().newMessage(msg).getFormattedMessage()); 057 } 058 059 @Override 060 public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, 061 final Throwable t) { 062 return filter(msg.getFormattedMessage()); 063 } 064 065 @Override 066 public Result filter(final LogEvent event) { 067 return filter(event.getMessage().getFormattedMessage()); 068 } 069 070 private Result filter(final String msg) { 071 return msg.contains(this.text) ? onMatch : onMismatch; 072 } 073 074 @Override 075 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 076 final Object p0) { 077 return filter(logger.getMessageFactory().newMessage(msg, p0).getFormattedMessage()); 078 } 079 080 @Override 081 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 082 final Object p0, final Object p1) { 083 return filter(logger.getMessageFactory().newMessage(msg, p0, p1).getFormattedMessage()); 084 } 085 086 @Override 087 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 088 final Object p0, final Object p1, final Object p2) { 089 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2).getFormattedMessage()); 090 } 091 092 @Override 093 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 094 final Object p0, final Object p1, final Object p2, final Object p3) { 095 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2, p3).getFormattedMessage()); 096 } 097 098 @Override 099 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 100 final Object p0, final Object p1, final Object p2, final Object p3, 101 final Object p4) { 102 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2, p3, p4).getFormattedMessage()); 103 } 104 105 @Override 106 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 107 final Object p0, final Object p1, final Object p2, final Object p3, 108 final Object p4, final Object p5) { 109 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2, p3, p4, p5).getFormattedMessage()); 110 } 111 112 @Override 113 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 114 final Object p0, final Object p1, final Object p2, final Object p3, 115 final Object p4, final Object p5, final Object p6) { 116 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2, p3, p4, p5, p6).getFormattedMessage()); 117 } 118 119 @Override 120 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 121 final Object p0, final Object p1, final Object p2, final Object p3, 122 final Object p4, final Object p5, final Object p6, 123 final Object p7) { 124 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2, p3, p4, p5, p6, p7).getFormattedMessage()); 125 } 126 127 @Override 128 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 129 final Object p0, final Object p1, final Object p2, final Object p3, 130 final Object p4, final Object p5, final Object p6, 131 final Object p7, final Object p8) { 132 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2, p3, p4, p5, p6, p7, p8) 133 .getFormattedMessage()); 134 } 135 136 @Override 137 public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, 138 final Object p0, final Object p1, final Object p2, final Object p3, 139 final Object p4, final Object p5, final Object p6, 140 final Object p7, final Object p8, final Object p9) { 141 return filter(logger.getMessageFactory().newMessage(msg, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) 142 .getFormattedMessage()); 143 } 144 145 @Override 146 public String toString() { 147 return text; 148 } 149 150 @PluginBuilderFactory 151 public static StringMatchFilter.Builder newBuilder() { 152 return new StringMatchFilter.Builder(); 153 } 154 155 public static class Builder extends AbstractFilterBuilder<StringMatchFilter.Builder> implements org.apache.logging.log4j.core.util.Builder<StringMatchFilter> { 156 @PluginBuilderAttribute 157 private String text = ""; 158 159 /** 160 * Sets the logging level to use. 161 * @param level the logging level to use. 162 * @return this 163 */ 164 public StringMatchFilter.Builder setMatchString(final String text) { 165 this.text = text; 166 return this; 167 } 168 169 @Override 170 public StringMatchFilter build() { 171 return new StringMatchFilter(this.text, this.getOnMatch(), this.getOnMismatch()); 172 } 173 } 174 175}