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  package org.apache.logging.log4j.core.filter;
18  
19  import org.apache.logging.log4j.Level;
20  import org.apache.logging.log4j.Marker;
21  import org.apache.logging.log4j.core.Filter;
22  import org.apache.logging.log4j.core.LogEvent;
23  import org.apache.logging.log4j.core.Logger;
24  import org.apache.logging.log4j.core.config.Node;
25  import org.apache.logging.log4j.core.config.plugins.Plugin;
26  import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
27  import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;
28  import org.apache.logging.log4j.core.config.plugins.PluginBuilderFactory;
29  import org.apache.logging.log4j.core.config.plugins.PluginFactory;
30  import org.apache.logging.log4j.message.Message;
31  import org.apache.logging.log4j.util.PerformanceSensitive;
32  
33  /**
34   * This filter returns the onMatch result if the logging level in the event matches the specified logging level
35   * exactly.
36   */
37  @Plugin(name = "LevelMatchFilter", category = Node.CATEGORY, elementType = Filter.ELEMENT_TYPE, printObject = true)
38  @PerformanceSensitive("allocation")
39  public final class LevelMatchFilter extends AbstractFilter {
40  
41      public static final String ATTR_MATCH = "match";
42      private final Level level;
43  
44      private LevelMatchFilter(final Level level, final Result onMatch, final Result onMismatch) {
45          super(onMatch, onMismatch);
46          this.level = level;
47      }
48  
49      @Override
50      public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
51                           final Object... params) {
52          return filter(level);
53      }
54  
55      @Override
56      public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg,
57                           final Throwable t) {
58          return filter(level);
59      }
60  
61      @Override
62      public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg,
63                           final Throwable t) {
64          return filter(level);
65      }
66  
67      @Override
68      public Result filter(final LogEvent event) {
69          return filter(event.getLevel());
70      }
71  
72      private Result filter(final Level level) {
73          return level == this.level ? onMatch : onMismatch;
74      }
75  
76      @Override
77      public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
78              final Object p0) {
79          return filter(level);
80      }
81  
82      @Override
83      public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
84              final Object p0, final Object p1) {
85          return filter(level);
86      }
87  
88      @Override
89      public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
90              final Object p0, final Object p1, final Object p2) {
91          return filter(level);
92      }
93  
94      @Override
95      public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
96              final Object p0, final Object p1, final Object p2, final Object p3) {
97          return filter(level);
98      }
99  
100     @Override
101     public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
102             final Object p0, final Object p1, final Object p2, final Object p3,
103             final Object p4) {
104         return filter(level);
105     }
106 
107     @Override
108     public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
109             final Object p0, final Object p1, final Object p2, final Object p3,
110             final Object p4, final Object p5) {
111         return filter(level);
112     }
113 
114     @Override
115     public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
116             final Object p0, final Object p1, final Object p2, final Object p3,
117             final Object p4, final Object p5, final Object p6) {
118         return filter(level);
119     }
120 
121     @Override
122     public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
123             final Object p0, final Object p1, final Object p2, final Object p3,
124             final Object p4, final Object p5, final Object p6,
125             final Object p7) {
126         return filter(level);
127     }
128 
129     @Override
130     public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
131             final Object p0, final Object p1, final Object p2, final Object p3,
132             final Object p4, final Object p5, final Object p6,
133             final Object p7, final Object p8) {
134         return filter(level);
135     }
136 
137     @Override
138     public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,
139             final Object p0, final Object p1, final Object p2, final Object p3,
140             final Object p4, final Object p5, final Object p6,
141             final Object p7, final Object p8, final Object p9) {
142         return filter(level);
143     }
144 
145     @Override
146     public String toString() {
147         return level.toString();
148     }
149 
150     @PluginBuilderFactory
151     public static LevelMatchFilter.Builder newBuilder() {
152         return new LevelMatchFilter.Builder();
153     }
154 
155     public static class Builder extends AbstractFilterBuilder<LevelMatchFilter.Builder> implements org.apache.logging.log4j.core.util.Builder<LevelMatchFilter> {
156         @PluginBuilderAttribute
157         private Level level = Level.ERROR;
158 
159         /**
160          * Sets the logging level to use.
161          * @param level the logging level to use.
162          * @return this
163          */
164         public LevelMatchFilter.Builder setLevel(final Level level) {
165             this.level = level;
166             return this;
167         }
168 
169         @Override
170         public LevelMatchFilter build() {
171             return new LevelMatchFilter(this.level, this.getOnMatch(), this.getOnMismatch());
172         }
173     }
174 
175 }