Note that I wrote such a filter, which is under review ATM here: - https://issues.apache.org/jira/browse/LOG4J2-1106 - https://issues.apache.org/jira/browse/LOG4J2-1105
Gary On Thu, Aug 27, 2015 at 11:51 AM, Nicholas Duane <nic...@msn.com> wrote: > > > > I've got a couple questions regarding plugins I'm hoping someone might be > able to help me with. I checked the docs and it's still not quite clear. > > 1. I'm unsure what to set printObject to in my Plugin annotation. From > http://logging.apache.org/log4j/2.x/manual/extending.html it says: > > "Specifying the printObject attribute with a value of "true" indicates > that a call to toString will format the arguments to the filter as the > configuration is being processed." > > which unfortunately doesn't clear things up any. I looked at the docs for > printObject and that doesn't say anything other than it's a Boolean and its > default is false. > > 2. I created a LevelRangeFiler and I'm trying to figure out how to get it > loaded by log4j. I read over the instructions on plugins located at > http://logging.apache.org/log4j/2.x/manual/plugins.html but since I'm a > java noob I'm still a bit lost. I'm wondering, if I just have a .java > class which I compile to a .class file, can that be used? If so, how? > > Below is the filter I wrote based on looking at the threshold filter > example at http://logging.apache.org/log4j/2.x/manual/extending.html. > > import org.apache.logging.log4j.core.filter.AbstractFilter; > import org.apache.logging.log4j.core.Filter; > import org.apache.logging.log4j.core.config.plugins.Plugin; > import org.apache.logging.log4j.core.config.plugins.PluginAttribute; > import org.apache.logging.log4j.core.config.plugins.PluginFactory; > import org.apache.logging.log4j.Level; > import org.apache.logging.log4j.core.LogEvent; > import org.apache.logging.log4j.core.Logger; > import org.apache.logging.log4j.Marker; > import org.apache.logging.log4j.message.Message; > > @Plugin(name="LevelRangeFilter", category="Core", elementType="filter", > printObject=true) > public class LevelRangeFilter extends AbstractFilter > { > private final Level minLevel; > private final Level maxLevel; > > public LevelRangeFilter(Level minLevel, Level maxLevel, > Filter.Result onMatch, Filter.Result onMismatch) > { > super(onMatch, onMismatch); > this.minLevel = minLevel; > this.maxLevel = maxLevel; > } > > private Result filter(Level level) > { > if (level.isMoreSpecificThan(this.minLevel) && > level.isLessSpecificThan(this.maxLevel)) > { > return this.onMatch; > } > return this.onMismatch; > } > > public Filter.Result filter(Logger logger, Level level, > Marker marker, String msg, Object[] params) > { > return filter(level); > } > > public Filter.Result filter(Logger logger, Level level, > Marker marker, Object msg, Throwable t) > { > return filter(level); > } > > public Filter.Result filter(Logger logger, Level level, > Marker marker, Message msg, Throwable t) > { > return filter(level); > } > > public Filter.Result filter(LogEvent event) > { > return filter(event.getLevel()); > } > > @PluginFactory > public static LevelRangeFilter createFilter( > @PluginAttribute(value="minLevel", > defaultString="DEBUG") Level minLevel, > @PluginAttribute(value="maxLevel", > defaultString="FATAL") Level maxLevel, > @PluginAttribute(value="onMatch", > defaultString="NEUTRAL") Result onMatch, > @PluginAttribute(value="onMismatch", > defaultString="DENY") Result onMismatch) > { > return new LevelRangeFilter(minLevel, maxLevel, onMatch, onMismatch); > } > } > > Thanks, > Nick > > > -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory