<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.2"></a>
<span class="sourceLineNo">003</span> * contributor license agreements. See the NOTICE file distributed with<a name="line.3"></a>
<span class="sourceLineNo">004</span> * this work for additional information regarding copyright ownership.<a name="line.4"></a>
<span class="sourceLineNo">005</span> * The ASF licenses this file to You under the Apache license, Version 2.0<a name="line.5"></a>
<span class="sourceLineNo">006</span> * (the "License"); you may not use this file except in compliance with<a name="line.6"></a>
<span class="sourceLineNo">007</span> * the License. You may obtain a copy of the License at<a name="line.7"></a>
<span class="sourceLineNo">008</span> *<a name="line.8"></a>
<span class="sourceLineNo">009</span> *      http://www.apache.org/licenses/LICENSE-2.0<a name="line.9"></a>
<span class="sourceLineNo">010</span> *<a name="line.10"></a>
<span class="sourceLineNo">011</span> * Unless required by applicable law or agreed to in writing, software<a name="line.11"></a>
<span class="sourceLineNo">012</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.13"></a>
<span class="sourceLineNo">014</span> * See the license for the specific language governing permissions and<a name="line.14"></a>
<span class="sourceLineNo">015</span> * limitations under the license.<a name="line.15"></a>
<span class="sourceLineNo">016</span> */<a name="line.16"></a>
<span class="sourceLineNo">017</span>package org.apache.logging.log4j.core.filter;<a name="line.17"></a>
<span class="sourceLineNo">018</span><a name="line.18"></a>
<span class="sourceLineNo">019</span>import org.apache.logging.log4j.Level;<a name="line.19"></a>
<span class="sourceLineNo">020</span>import org.apache.logging.log4j.Marker;<a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.logging.log4j.core.AbstractLifeCycle;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.logging.log4j.core.Filter;<a name="line.22"></a>
<span class="sourceLineNo">023</span>import org.apache.logging.log4j.core.LogEvent;<a name="line.23"></a>
<span class="sourceLineNo">024</span>import org.apache.logging.log4j.core.Logger;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import org.apache.logging.log4j.core.config.plugins.PluginBuilderAttribute;<a name="line.25"></a>
<span class="sourceLineNo">026</span>import org.apache.logging.log4j.message.Message;<a name="line.26"></a>
<span class="sourceLineNo">027</span><a name="line.27"></a>
<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
<span class="sourceLineNo">029</span> * Users should extend this class to implement filters. Filters can be either context wide or attached to<a name="line.29"></a>
<span class="sourceLineNo">030</span> * an appender. A filter may choose to support being called only from the context or only from an appender in<a name="line.30"></a>
<span class="sourceLineNo">031</span> * which case it will only implement the required method(s). The rest will default to return {@link org.apache.logging.log4j.core.Filter.Result#NEUTRAL}.<a name="line.31"></a>
<span class="sourceLineNo">032</span> * &lt;p&gt;<a name="line.32"></a>
<span class="sourceLineNo">033</span> * Garbage-free note: the methods with unrolled varargs by default delegate to the<a name="line.33"></a>
<span class="sourceLineNo">034</span> * {@link #filter(Logger, Level, Marker, String, Object...) filter method with vararg parameters}.<a name="line.34"></a>
<span class="sourceLineNo">035</span> * Subclasses that want to be garbage-free should override these methods to implement the appropriate filtering<a name="line.35"></a>
<span class="sourceLineNo">036</span> * without creating a vararg array.<a name="line.36"></a>
<span class="sourceLineNo">037</span> * &lt;/p&gt;<a name="line.37"></a>
<span class="sourceLineNo">038</span> */<a name="line.38"></a>
<span class="sourceLineNo">039</span>public abstract class AbstractFilter extends AbstractLifeCycle implements Filter {<a name="line.39"></a>
<span class="sourceLineNo">040</span><a name="line.40"></a>
<span class="sourceLineNo">041</span>    public static abstract class AbstractFilterBuilder&lt;B extends AbstractFilterBuilder&lt;B&gt;&gt;  {<a name="line.41"></a>
<span class="sourceLineNo">042</span><a name="line.42"></a>
<span class="sourceLineNo">043</span>        public static final String ATTR_ON_MISMATCH = "onMismatch";<a name="line.43"></a>
<span class="sourceLineNo">044</span>        public static final String ATTR_ON_MATCH = "onMatch";<a name="line.44"></a>
<span class="sourceLineNo">045</span><a name="line.45"></a>
<span class="sourceLineNo">046</span>        @PluginBuilderAttribute(ATTR_ON_MATCH)<a name="line.46"></a>
<span class="sourceLineNo">047</span>        private Result onMatch = Result.NEUTRAL;<a name="line.47"></a>
<span class="sourceLineNo">048</span><a name="line.48"></a>
<span class="sourceLineNo">049</span>        @PluginBuilderAttribute(ATTR_ON_MISMATCH)<a name="line.49"></a>
<span class="sourceLineNo">050</span>        private Result onMismatch = Result.DENY;<a name="line.50"></a>
<span class="sourceLineNo">051</span><a name="line.51"></a>
<span class="sourceLineNo">052</span>        public Result getOnMatch() {<a name="line.52"></a>
<span class="sourceLineNo">053</span>            return onMatch;<a name="line.53"></a>
<span class="sourceLineNo">054</span>        }<a name="line.54"></a>
<span class="sourceLineNo">055</span><a name="line.55"></a>
<span class="sourceLineNo">056</span>        public Result getOnMismatch() {<a name="line.56"></a>
<span class="sourceLineNo">057</span>            return onMismatch;<a name="line.57"></a>
<span class="sourceLineNo">058</span>        }<a name="line.58"></a>
<span class="sourceLineNo">059</span><a name="line.59"></a>
<span class="sourceLineNo">060</span>        /**<a name="line.60"></a>
<span class="sourceLineNo">061</span>         * Sets the Result to return when the filter matches. Defaults to Result.NEUTRAL.<a name="line.61"></a>
<span class="sourceLineNo">062</span>         * @param onMatch the Result to return when the filter matches.<a name="line.62"></a>
<span class="sourceLineNo">063</span>         * @return this<a name="line.63"></a>
<span class="sourceLineNo">064</span>         */<a name="line.64"></a>
<span class="sourceLineNo">065</span>        public B setOnMatch(final Result onMatch) {<a name="line.65"></a>
<span class="sourceLineNo">066</span>            this.onMatch = onMatch;<a name="line.66"></a>
<span class="sourceLineNo">067</span>            return asBuilder();<a name="line.67"></a>
<span class="sourceLineNo">068</span>        }<a name="line.68"></a>
<span class="sourceLineNo">069</span><a name="line.69"></a>
<span class="sourceLineNo">070</span>        /**<a name="line.70"></a>
<span class="sourceLineNo">071</span>         * Sets the Result to return when the filter does not match. The default is Result.DENY.<a name="line.71"></a>
<span class="sourceLineNo">072</span>         * @param onMismatch the Result to return when the filter does not match.<a name="line.72"></a>
<span class="sourceLineNo">073</span>         * @return this<a name="line.73"></a>
<span class="sourceLineNo">074</span>         */<a name="line.74"></a>
<span class="sourceLineNo">075</span>        public B setOnMismatch(final Result onMismatch) {<a name="line.75"></a>
<span class="sourceLineNo">076</span>            this.onMismatch = onMismatch;<a name="line.76"></a>
<span class="sourceLineNo">077</span>            return asBuilder();<a name="line.77"></a>
<span class="sourceLineNo">078</span>        }<a name="line.78"></a>
<span class="sourceLineNo">079</span><a name="line.79"></a>
<span class="sourceLineNo">080</span>        @SuppressWarnings("unchecked")<a name="line.80"></a>
<span class="sourceLineNo">081</span>        public B asBuilder() {<a name="line.81"></a>
<span class="sourceLineNo">082</span>            return (B) this;<a name="line.82"></a>
<span class="sourceLineNo">083</span>        }<a name="line.83"></a>
<span class="sourceLineNo">084</span><a name="line.84"></a>
<span class="sourceLineNo">085</span>    }<a name="line.85"></a>
<span class="sourceLineNo">086</span><a name="line.86"></a>
<span class="sourceLineNo">087</span>    /**<a name="line.87"></a>
<span class="sourceLineNo">088</span>     * The onMatch Result.<a name="line.88"></a>
<span class="sourceLineNo">089</span>     */<a name="line.89"></a>
<span class="sourceLineNo">090</span>    protected final Result onMatch;<a name="line.90"></a>
<span class="sourceLineNo">091</span><a name="line.91"></a>
<span class="sourceLineNo">092</span>    /**<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * The onMismatch Result.<a name="line.93"></a>
<span class="sourceLineNo">094</span>     */<a name="line.94"></a>
<span class="sourceLineNo">095</span>    protected final Result onMismatch;<a name="line.95"></a>
<span class="sourceLineNo">096</span><a name="line.96"></a>
<span class="sourceLineNo">097</span>    /**<a name="line.97"></a>
<span class="sourceLineNo">098</span>     * The default constructor.<a name="line.98"></a>
<span class="sourceLineNo">099</span>     */<a name="line.99"></a>
<span class="sourceLineNo">100</span>    protected AbstractFilter() {<a name="line.100"></a>
<span class="sourceLineNo">101</span>        this(null, null);<a name="line.101"></a>
<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
<span class="sourceLineNo">103</span><a name="line.103"></a>
<span class="sourceLineNo">104</span>    /**<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * Constructor that allows the onMatch and onMismatch actions to be set.<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * @param onMatch The result to return when a match occurs.<a name="line.106"></a>
<span class="sourceLineNo">107</span>     * @param onMismatch The result to return when a match dos not occur.<a name="line.107"></a>
<span class="sourceLineNo">108</span>     */<a name="line.108"></a>
<span class="sourceLineNo">109</span>    protected AbstractFilter(final Result onMatch, final Result onMismatch) {<a name="line.109"></a>
<span class="sourceLineNo">110</span>        this.onMatch = onMatch == null ? Result.NEUTRAL : onMatch;<a name="line.110"></a>
<span class="sourceLineNo">111</span>        this.onMismatch = onMismatch == null ? Result.DENY : onMismatch;<a name="line.111"></a>
<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
<span class="sourceLineNo">113</span><a name="line.113"></a>
<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
<span class="sourceLineNo">115</span>    protected boolean equalsImpl(final Object obj) {<a name="line.115"></a>
<span class="sourceLineNo">116</span>        if (this == obj) {<a name="line.116"></a>
<span class="sourceLineNo">117</span>            return true;<a name="line.117"></a>
<span class="sourceLineNo">118</span>        }<a name="line.118"></a>
<span class="sourceLineNo">119</span>        if (!super.equalsImpl(obj)) {<a name="line.119"></a>
<span class="sourceLineNo">120</span>            return false;<a name="line.120"></a>
<span class="sourceLineNo">121</span>        }<a name="line.121"></a>
<span class="sourceLineNo">122</span>        if (getClass() != obj.getClass()) {<a name="line.122"></a>
<span class="sourceLineNo">123</span>            return false;<a name="line.123"></a>
<span class="sourceLineNo">124</span>        }<a name="line.124"></a>
<span class="sourceLineNo">125</span>        final AbstractFilter other = (AbstractFilter) obj;<a name="line.125"></a>
<span class="sourceLineNo">126</span>        if (onMatch != other.onMatch) {<a name="line.126"></a>
<span class="sourceLineNo">127</span>            return false;<a name="line.127"></a>
<span class="sourceLineNo">128</span>        }<a name="line.128"></a>
<span class="sourceLineNo">129</span>        if (onMismatch != other.onMismatch) {<a name="line.129"></a>
<span class="sourceLineNo">130</span>            return false;<a name="line.130"></a>
<span class="sourceLineNo">131</span>        }<a name="line.131"></a>
<span class="sourceLineNo">132</span>        return true;<a name="line.132"></a>
<span class="sourceLineNo">133</span>    }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span>    /**<a name="line.135"></a>
<span class="sourceLineNo">136</span>     * Context Filter method. The default returns NEUTRAL.<a name="line.136"></a>
<span class="sourceLineNo">137</span>     * @param event The LogEvent.<a name="line.137"></a>
<span class="sourceLineNo">138</span>     * @return The Result of filtering.<a name="line.138"></a>
<span class="sourceLineNo">139</span>     */<a name="line.139"></a>
<span class="sourceLineNo">140</span>    @Override<a name="line.140"></a>
<span class="sourceLineNo">141</span>    public Result filter(final LogEvent event) {<a name="line.141"></a>
<span class="sourceLineNo">142</span>        return Result.NEUTRAL;<a name="line.142"></a>
<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
<span class="sourceLineNo">144</span><a name="line.144"></a>
<span class="sourceLineNo">145</span>    /**<a name="line.145"></a>
<span class="sourceLineNo">146</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.146"></a>
<span class="sourceLineNo">147</span>     * @param logger the Logger.<a name="line.147"></a>
<span class="sourceLineNo">148</span>     * @param level The logging Level.<a name="line.148"></a>
<span class="sourceLineNo">149</span>     * @param marker The Marker, if any.<a name="line.149"></a>
<span class="sourceLineNo">150</span>     * @param msg The message, if present.<a name="line.150"></a>
<span class="sourceLineNo">151</span>     * @param t A throwable or null.<a name="line.151"></a>
<span class="sourceLineNo">152</span>     * @return The Result of filtering.<a name="line.152"></a>
<span class="sourceLineNo">153</span>     */<a name="line.153"></a>
<span class="sourceLineNo">154</span>    @Override<a name="line.154"></a>
<span class="sourceLineNo">155</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg,<a name="line.155"></a>
<span class="sourceLineNo">156</span>                         final Throwable t) {<a name="line.156"></a>
<span class="sourceLineNo">157</span>        return Result.NEUTRAL;<a name="line.157"></a>
<span class="sourceLineNo">158</span>    }<a name="line.158"></a>
<span class="sourceLineNo">159</span><a name="line.159"></a>
<span class="sourceLineNo">160</span>    /**<a name="line.160"></a>
<span class="sourceLineNo">161</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.161"></a>
<span class="sourceLineNo">162</span>     * @param logger the Logger.<a name="line.162"></a>
<span class="sourceLineNo">163</span>     * @param level The logging Level.<a name="line.163"></a>
<span class="sourceLineNo">164</span>     * @param marker The Marker, if any.<a name="line.164"></a>
<span class="sourceLineNo">165</span>     * @param msg The message, if present.<a name="line.165"></a>
<span class="sourceLineNo">166</span>     * @param t A throwable or null.<a name="line.166"></a>
<span class="sourceLineNo">167</span>     * @return The Result of filtering.<a name="line.167"></a>
<span class="sourceLineNo">168</span>     */<a name="line.168"></a>
<span class="sourceLineNo">169</span>    @Override<a name="line.169"></a>
<span class="sourceLineNo">170</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg,<a name="line.170"></a>
<span class="sourceLineNo">171</span>                         final Throwable t) {<a name="line.171"></a>
<span class="sourceLineNo">172</span>        return Result.NEUTRAL;<a name="line.172"></a>
<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
<span class="sourceLineNo">174</span><a name="line.174"></a>
<span class="sourceLineNo">175</span>    /**<a name="line.175"></a>
<span class="sourceLineNo">176</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.176"></a>
<span class="sourceLineNo">177</span>     * @param logger the Logger.<a name="line.177"></a>
<span class="sourceLineNo">178</span>     * @param level The logging Level.<a name="line.178"></a>
<span class="sourceLineNo">179</span>     * @param marker The Marker, if any.<a name="line.179"></a>
<span class="sourceLineNo">180</span>     * @param msg The message, if present.<a name="line.180"></a>
<span class="sourceLineNo">181</span>     * @param params An array of parameters or null.<a name="line.181"></a>
<span class="sourceLineNo">182</span>     * @return The Result of filtering.<a name="line.182"></a>
<span class="sourceLineNo">183</span>     */<a name="line.183"></a>
<span class="sourceLineNo">184</span>    @Override<a name="line.184"></a>
<span class="sourceLineNo">185</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.185"></a>
<span class="sourceLineNo">186</span>                         final Object... params) {<a name="line.186"></a>
<span class="sourceLineNo">187</span>        return Result.NEUTRAL;<a name="line.187"></a>
<span class="sourceLineNo">188</span>    }<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span>    /**<a name="line.190"></a>
<span class="sourceLineNo">191</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.191"></a>
<span class="sourceLineNo">192</span>     * @param logger the Logger.<a name="line.192"></a>
<span class="sourceLineNo">193</span>     * @param level The logging Level.<a name="line.193"></a>
<span class="sourceLineNo">194</span>     * @param marker The Marker, if any.<a name="line.194"></a>
<span class="sourceLineNo">195</span>     * @param msg The message, if present.<a name="line.195"></a>
<span class="sourceLineNo">196</span>     * @param p0 the message parameters<a name="line.196"></a>
<span class="sourceLineNo">197</span>     * @return The Result of filtering.<a name="line.197"></a>
<span class="sourceLineNo">198</span>     * @since 2.7<a name="line.198"></a>
<span class="sourceLineNo">199</span>     */<a name="line.199"></a>
<span class="sourceLineNo">200</span>    @Override<a name="line.200"></a>
<span class="sourceLineNo">201</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.201"></a>
<span class="sourceLineNo">202</span>            final Object p0) {<a name="line.202"></a>
<span class="sourceLineNo">203</span>        return filter(logger, level, marker, msg, new Object[] {p0});<a name="line.203"></a>
<span class="sourceLineNo">204</span>    }<a name="line.204"></a>
<span class="sourceLineNo">205</span><a name="line.205"></a>
<span class="sourceLineNo">206</span>    /**<a name="line.206"></a>
<span class="sourceLineNo">207</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.207"></a>
<span class="sourceLineNo">208</span>     * @param logger the Logger.<a name="line.208"></a>
<span class="sourceLineNo">209</span>     * @param level The logging Level.<a name="line.209"></a>
<span class="sourceLineNo">210</span>     * @param marker The Marker, if any.<a name="line.210"></a>
<span class="sourceLineNo">211</span>     * @param msg The message, if present.<a name="line.211"></a>
<span class="sourceLineNo">212</span>     * @param p0 the message parameters<a name="line.212"></a>
<span class="sourceLineNo">213</span>     * @param p1 the message parameters<a name="line.213"></a>
<span class="sourceLineNo">214</span>     * @return The Result of filtering.<a name="line.214"></a>
<span class="sourceLineNo">215</span>     * @since 2.7<a name="line.215"></a>
<span class="sourceLineNo">216</span>     */<a name="line.216"></a>
<span class="sourceLineNo">217</span>    @Override<a name="line.217"></a>
<span class="sourceLineNo">218</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.218"></a>
<span class="sourceLineNo">219</span>            final Object p0, final Object p1) {<a name="line.219"></a>
<span class="sourceLineNo">220</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1});<a name="line.220"></a>
<span class="sourceLineNo">221</span>    }<a name="line.221"></a>
<span class="sourceLineNo">222</span><a name="line.222"></a>
<span class="sourceLineNo">223</span>    /**<a name="line.223"></a>
<span class="sourceLineNo">224</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.224"></a>
<span class="sourceLineNo">225</span>     * @param logger the Logger.<a name="line.225"></a>
<span class="sourceLineNo">226</span>     * @param level The logging Level.<a name="line.226"></a>
<span class="sourceLineNo">227</span>     * @param marker The Marker, if any.<a name="line.227"></a>
<span class="sourceLineNo">228</span>     * @param msg The message, if present.<a name="line.228"></a>
<span class="sourceLineNo">229</span>     * @param p0 the message parameters<a name="line.229"></a>
<span class="sourceLineNo">230</span>     * @param p1 the message parameters<a name="line.230"></a>
<span class="sourceLineNo">231</span>     * @param p2 the message parameters<a name="line.231"></a>
<span class="sourceLineNo">232</span>     * @return The Result of filtering.<a name="line.232"></a>
<span class="sourceLineNo">233</span>     * @since 2.7<a name="line.233"></a>
<span class="sourceLineNo">234</span>     */<a name="line.234"></a>
<span class="sourceLineNo">235</span>    @Override<a name="line.235"></a>
<span class="sourceLineNo">236</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.236"></a>
<span class="sourceLineNo">237</span>            final Object p0, final Object p1, final Object p2) {<a name="line.237"></a>
<span class="sourceLineNo">238</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2});<a name="line.238"></a>
<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
<span class="sourceLineNo">240</span><a name="line.240"></a>
<span class="sourceLineNo">241</span>    /**<a name="line.241"></a>
<span class="sourceLineNo">242</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.242"></a>
<span class="sourceLineNo">243</span>     * @param logger the Logger.<a name="line.243"></a>
<span class="sourceLineNo">244</span>     * @param level The logging Level.<a name="line.244"></a>
<span class="sourceLineNo">245</span>     * @param marker The Marker, if any.<a name="line.245"></a>
<span class="sourceLineNo">246</span>     * @param msg The message, if present.<a name="line.246"></a>
<span class="sourceLineNo">247</span>     * @param p0 the message parameters<a name="line.247"></a>
<span class="sourceLineNo">248</span>     * @param p1 the message parameters<a name="line.248"></a>
<span class="sourceLineNo">249</span>     * @param p2 the message parameters<a name="line.249"></a>
<span class="sourceLineNo">250</span>     * @param p3 the message parameters<a name="line.250"></a>
<span class="sourceLineNo">251</span>     * @return The Result of filtering.<a name="line.251"></a>
<span class="sourceLineNo">252</span>     * @since 2.7<a name="line.252"></a>
<span class="sourceLineNo">253</span>     */<a name="line.253"></a>
<span class="sourceLineNo">254</span>    @Override<a name="line.254"></a>
<span class="sourceLineNo">255</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.255"></a>
<span class="sourceLineNo">256</span>            final Object p0, final Object p1, final Object p2, final Object p3) {<a name="line.256"></a>
<span class="sourceLineNo">257</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2, p3});<a name="line.257"></a>
<span class="sourceLineNo">258</span>    }<a name="line.258"></a>
<span class="sourceLineNo">259</span><a name="line.259"></a>
<span class="sourceLineNo">260</span>    /**<a name="line.260"></a>
<span class="sourceLineNo">261</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.261"></a>
<span class="sourceLineNo">262</span>     * @param logger the Logger.<a name="line.262"></a>
<span class="sourceLineNo">263</span>     * @param level The logging Level.<a name="line.263"></a>
<span class="sourceLineNo">264</span>     * @param marker The Marker, if any.<a name="line.264"></a>
<span class="sourceLineNo">265</span>     * @param msg The message, if present.<a name="line.265"></a>
<span class="sourceLineNo">266</span>     * @param p0 the message parameters<a name="line.266"></a>
<span class="sourceLineNo">267</span>     * @param p1 the message parameters<a name="line.267"></a>
<span class="sourceLineNo">268</span>     * @param p2 the message parameters<a name="line.268"></a>
<span class="sourceLineNo">269</span>     * @param p3 the message parameters<a name="line.269"></a>
<span class="sourceLineNo">270</span>     * @param p4 the message parameters<a name="line.270"></a>
<span class="sourceLineNo">271</span>     * @return The Result of filtering.<a name="line.271"></a>
<span class="sourceLineNo">272</span>     * @since 2.7<a name="line.272"></a>
<span class="sourceLineNo">273</span>     */<a name="line.273"></a>
<span class="sourceLineNo">274</span>    @Override<a name="line.274"></a>
<span class="sourceLineNo">275</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.275"></a>
<span class="sourceLineNo">276</span>            final Object p0, final Object p1, final Object p2, final Object p3,<a name="line.276"></a>
<span class="sourceLineNo">277</span>            final Object p4) {<a name="line.277"></a>
<span class="sourceLineNo">278</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2, p3, p4});<a name="line.278"></a>
<span class="sourceLineNo">279</span>    }<a name="line.279"></a>
<span class="sourceLineNo">280</span><a name="line.280"></a>
<span class="sourceLineNo">281</span>    /**<a name="line.281"></a>
<span class="sourceLineNo">282</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.282"></a>
<span class="sourceLineNo">283</span>     * @param logger the Logger.<a name="line.283"></a>
<span class="sourceLineNo">284</span>     * @param level The logging Level.<a name="line.284"></a>
<span class="sourceLineNo">285</span>     * @param marker The Marker, if any.<a name="line.285"></a>
<span class="sourceLineNo">286</span>     * @param msg The message, if present.<a name="line.286"></a>
<span class="sourceLineNo">287</span>     * @param p0 the message parameters<a name="line.287"></a>
<span class="sourceLineNo">288</span>     * @param p1 the message parameters<a name="line.288"></a>
<span class="sourceLineNo">289</span>     * @param p2 the message parameters<a name="line.289"></a>
<span class="sourceLineNo">290</span>     * @param p3 the message parameters<a name="line.290"></a>
<span class="sourceLineNo">291</span>     * @param p4 the message parameters<a name="line.291"></a>
<span class="sourceLineNo">292</span>     * @param p5 the message parameters<a name="line.292"></a>
<span class="sourceLineNo">293</span>     * @return The Result of filtering.<a name="line.293"></a>
<span class="sourceLineNo">294</span>     * @since 2.7<a name="line.294"></a>
<span class="sourceLineNo">295</span>     */<a name="line.295"></a>
<span class="sourceLineNo">296</span>    @Override<a name="line.296"></a>
<span class="sourceLineNo">297</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.297"></a>
<span class="sourceLineNo">298</span>            final Object p0, final Object p1, final Object p2, final Object p3,<a name="line.298"></a>
<span class="sourceLineNo">299</span>            final Object p4, final Object p5) {<a name="line.299"></a>
<span class="sourceLineNo">300</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2, p3, p4, p5});<a name="line.300"></a>
<span class="sourceLineNo">301</span>    }<a name="line.301"></a>
<span class="sourceLineNo">302</span><a name="line.302"></a>
<span class="sourceLineNo">303</span>    /**<a name="line.303"></a>
<span class="sourceLineNo">304</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.304"></a>
<span class="sourceLineNo">305</span>     * @param logger the Logger.<a name="line.305"></a>
<span class="sourceLineNo">306</span>     * @param level The logging Level.<a name="line.306"></a>
<span class="sourceLineNo">307</span>     * @param marker The Marker, if any.<a name="line.307"></a>
<span class="sourceLineNo">308</span>     * @param msg The message, if present.<a name="line.308"></a>
<span class="sourceLineNo">309</span>     * @param p0 the message parameters<a name="line.309"></a>
<span class="sourceLineNo">310</span>     * @param p1 the message parameters<a name="line.310"></a>
<span class="sourceLineNo">311</span>     * @param p2 the message parameters<a name="line.311"></a>
<span class="sourceLineNo">312</span>     * @param p3 the message parameters<a name="line.312"></a>
<span class="sourceLineNo">313</span>     * @param p4 the message parameters<a name="line.313"></a>
<span class="sourceLineNo">314</span>     * @param p5 the message parameters<a name="line.314"></a>
<span class="sourceLineNo">315</span>     * @param p6 the message parameters<a name="line.315"></a>
<span class="sourceLineNo">316</span>     * @return The Result of filtering.<a name="line.316"></a>
<span class="sourceLineNo">317</span>     * @since 2.7<a name="line.317"></a>
<span class="sourceLineNo">318</span>     */<a name="line.318"></a>
<span class="sourceLineNo">319</span>    @Override<a name="line.319"></a>
<span class="sourceLineNo">320</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.320"></a>
<span class="sourceLineNo">321</span>            final Object p0, final Object p1, final Object p2, final Object p3,<a name="line.321"></a>
<span class="sourceLineNo">322</span>            final Object p4, final Object p5, final Object p6) {<a name="line.322"></a>
<span class="sourceLineNo">323</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2, p3, p4, p5, p6});<a name="line.323"></a>
<span class="sourceLineNo">324</span>    }<a name="line.324"></a>
<span class="sourceLineNo">325</span><a name="line.325"></a>
<span class="sourceLineNo">326</span>    /**<a name="line.326"></a>
<span class="sourceLineNo">327</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.327"></a>
<span class="sourceLineNo">328</span>     * @param logger the Logger.<a name="line.328"></a>
<span class="sourceLineNo">329</span>     * @param level The logging Level.<a name="line.329"></a>
<span class="sourceLineNo">330</span>     * @param marker The Marker, if any.<a name="line.330"></a>
<span class="sourceLineNo">331</span>     * @param msg The message, if present.<a name="line.331"></a>
<span class="sourceLineNo">332</span>     * @param p0 the message parameters<a name="line.332"></a>
<span class="sourceLineNo">333</span>     * @param p1 the message parameters<a name="line.333"></a>
<span class="sourceLineNo">334</span>     * @param p2 the message parameters<a name="line.334"></a>
<span class="sourceLineNo">335</span>     * @param p3 the message parameters<a name="line.335"></a>
<span class="sourceLineNo">336</span>     * @param p4 the message parameters<a name="line.336"></a>
<span class="sourceLineNo">337</span>     * @param p5 the message parameters<a name="line.337"></a>
<span class="sourceLineNo">338</span>     * @param p6 the message parameters<a name="line.338"></a>
<span class="sourceLineNo">339</span>     * @param p7 the message parameters<a name="line.339"></a>
<span class="sourceLineNo">340</span>     * @return The Result of filtering.<a name="line.340"></a>
<span class="sourceLineNo">341</span>     * @since 2.7<a name="line.341"></a>
<span class="sourceLineNo">342</span>     */<a name="line.342"></a>
<span class="sourceLineNo">343</span>    @Override<a name="line.343"></a>
<span class="sourceLineNo">344</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.344"></a>
<span class="sourceLineNo">345</span>            final Object p0, final Object p1, final Object p2, final Object p3,<a name="line.345"></a>
<span class="sourceLineNo">346</span>            final Object p4, final Object p5, final Object p6,<a name="line.346"></a>
<span class="sourceLineNo">347</span>            final Object p7) {<a name="line.347"></a>
<span class="sourceLineNo">348</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2, p3, p4, p5, p6, p7});<a name="line.348"></a>
<span class="sourceLineNo">349</span>    }<a name="line.349"></a>
<span class="sourceLineNo">350</span><a name="line.350"></a>
<span class="sourceLineNo">351</span>    /**<a name="line.351"></a>
<span class="sourceLineNo">352</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.352"></a>
<span class="sourceLineNo">353</span>     * @param logger the Logger.<a name="line.353"></a>
<span class="sourceLineNo">354</span>     * @param level The logging Level.<a name="line.354"></a>
<span class="sourceLineNo">355</span>     * @param marker The Marker, if any.<a name="line.355"></a>
<span class="sourceLineNo">356</span>     * @param msg The message, if present.<a name="line.356"></a>
<span class="sourceLineNo">357</span>     * @param p0 the message parameters<a name="line.357"></a>
<span class="sourceLineNo">358</span>     * @param p1 the message parameters<a name="line.358"></a>
<span class="sourceLineNo">359</span>     * @param p2 the message parameters<a name="line.359"></a>
<span class="sourceLineNo">360</span>     * @param p3 the message parameters<a name="line.360"></a>
<span class="sourceLineNo">361</span>     * @param p4 the message parameters<a name="line.361"></a>
<span class="sourceLineNo">362</span>     * @param p5 the message parameters<a name="line.362"></a>
<span class="sourceLineNo">363</span>     * @param p6 the message parameters<a name="line.363"></a>
<span class="sourceLineNo">364</span>     * @param p7 the message parameters<a name="line.364"></a>
<span class="sourceLineNo">365</span>     * @param p8 the message parameters<a name="line.365"></a>
<span class="sourceLineNo">366</span>     * @return The Result of filtering.<a name="line.366"></a>
<span class="sourceLineNo">367</span>     * @since 2.7<a name="line.367"></a>
<span class="sourceLineNo">368</span>     */<a name="line.368"></a>
<span class="sourceLineNo">369</span>    @Override<a name="line.369"></a>
<span class="sourceLineNo">370</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.370"></a>
<span class="sourceLineNo">371</span>            final Object p0, final Object p1, final Object p2, final Object p3,<a name="line.371"></a>
<span class="sourceLineNo">372</span>            final Object p4, final Object p5, final Object p6,<a name="line.372"></a>
<span class="sourceLineNo">373</span>            final Object p7, final Object p8) {<a name="line.373"></a>
<span class="sourceLineNo">374</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2, p3, p4, p5, p6, p7, p8});<a name="line.374"></a>
<span class="sourceLineNo">375</span>    }<a name="line.375"></a>
<span class="sourceLineNo">376</span><a name="line.376"></a>
<span class="sourceLineNo">377</span>    /**<a name="line.377"></a>
<span class="sourceLineNo">378</span>     * Appender Filter method. The default returns NEUTRAL.<a name="line.378"></a>
<span class="sourceLineNo">379</span>     * @param logger the Logger.<a name="line.379"></a>
<span class="sourceLineNo">380</span>     * @param level The logging Level.<a name="line.380"></a>
<span class="sourceLineNo">381</span>     * @param marker The Marker, if any.<a name="line.381"></a>
<span class="sourceLineNo">382</span>     * @param msg The message, if present.<a name="line.382"></a>
<span class="sourceLineNo">383</span>     * @param p0 the message parameters<a name="line.383"></a>
<span class="sourceLineNo">384</span>     * @param p1 the message parameters<a name="line.384"></a>
<span class="sourceLineNo">385</span>     * @param p2 the message parameters<a name="line.385"></a>
<span class="sourceLineNo">386</span>     * @param p3 the message parameters<a name="line.386"></a>
<span class="sourceLineNo">387</span>     * @param p4 the message parameters<a name="line.387"></a>
<span class="sourceLineNo">388</span>     * @param p5 the message parameters<a name="line.388"></a>
<span class="sourceLineNo">389</span>     * @param p6 the message parameters<a name="line.389"></a>
<span class="sourceLineNo">390</span>     * @param p7 the message parameters<a name="line.390"></a>
<span class="sourceLineNo">391</span>     * @param p8 the message parameters<a name="line.391"></a>
<span class="sourceLineNo">392</span>     * @param p9 the message parameters<a name="line.392"></a>
<span class="sourceLineNo">393</span>     * @return The Result of filtering.<a name="line.393"></a>
<span class="sourceLineNo">394</span>     * @since 2.7<a name="line.394"></a>
<span class="sourceLineNo">395</span>     */<a name="line.395"></a>
<span class="sourceLineNo">396</span>    @Override<a name="line.396"></a>
<span class="sourceLineNo">397</span>    public Result filter(final Logger logger, final Level level, final Marker marker, final String msg,<a name="line.397"></a>
<span class="sourceLineNo">398</span>            final Object p0, final Object p1, final Object p2, final Object p3,<a name="line.398"></a>
<span class="sourceLineNo">399</span>            final Object p4, final Object p5, final Object p6,<a name="line.399"></a>
<span class="sourceLineNo">400</span>            final Object p7, final Object p8, final Object p9) {<a name="line.400"></a>
<span class="sourceLineNo">401</span>        return filter(logger, level, marker, msg, new Object[] {p0, p1, p2, p3, p4, p5, p6, p7, p8, p9});<a name="line.401"></a>
<span class="sourceLineNo">402</span>    }<a name="line.402"></a>
<span class="sourceLineNo">403</span><a name="line.403"></a>
<span class="sourceLineNo">404</span>    /**<a name="line.404"></a>
<span class="sourceLineNo">405</span>     * Returns the Result to be returned when a match occurs.<a name="line.405"></a>
<span class="sourceLineNo">406</span>     * @return the onMatch Result.<a name="line.406"></a>
<span class="sourceLineNo">407</span>     */<a name="line.407"></a>
<span class="sourceLineNo">408</span>    @Override<a name="line.408"></a>
<span class="sourceLineNo">409</span>    public final Result getOnMatch() {<a name="line.409"></a>
<span class="sourceLineNo">410</span>        return onMatch;<a name="line.410"></a>
<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
<span class="sourceLineNo">412</span><a name="line.412"></a>
<span class="sourceLineNo">413</span>    /**<a name="line.413"></a>
<span class="sourceLineNo">414</span>     * Returns the Result to be returned when a match does not occur.<a name="line.414"></a>
<span class="sourceLineNo">415</span>     * @return the onMismatch Result.<a name="line.415"></a>
<span class="sourceLineNo">416</span>     */<a name="line.416"></a>
<span class="sourceLineNo">417</span>    @Override<a name="line.417"></a>
<span class="sourceLineNo">418</span>    public final Result getOnMismatch() {<a name="line.418"></a>
<span class="sourceLineNo">419</span>        return onMismatch;<a name="line.419"></a>
<span class="sourceLineNo">420</span>    }<a name="line.420"></a>
<span class="sourceLineNo">421</span><a name="line.421"></a>
<span class="sourceLineNo">422</span>    @Override<a name="line.422"></a>
<span class="sourceLineNo">423</span>    protected int hashCodeImpl() {<a name="line.423"></a>
<span class="sourceLineNo">424</span>        final int prime = 31;<a name="line.424"></a>
<span class="sourceLineNo">425</span>        int result = super.hashCodeImpl();<a name="line.425"></a>
<span class="sourceLineNo">426</span>        result = prime * result + ((onMatch == null) ? 0 : onMatch.hashCode());<a name="line.426"></a>
<span class="sourceLineNo">427</span>        result = prime * result + ((onMismatch == null) ? 0 : onMismatch.hashCode());<a name="line.427"></a>
<span class="sourceLineNo">428</span>        return result;<a name="line.428"></a>
<span class="sourceLineNo">429</span>    }<a name="line.429"></a>
<span class="sourceLineNo">430</span><a name="line.430"></a>
<span class="sourceLineNo">431</span>    @Override<a name="line.431"></a>
<span class="sourceLineNo">432</span>    public String toString() {<a name="line.432"></a>
<span class="sourceLineNo">433</span>        return this.getClass().getSimpleName();<a name="line.433"></a>
<span class="sourceLineNo">434</span>    }<a name="line.434"></a>
<span class="sourceLineNo">435</span>}<a name="line.435"></a>




























































</pre>
</div>
</body>
</html>
