printObject affects the way plugins are logged when you have status=debug 
enabled.  If you set printObject to true then the Plugin’s toString method will 
be called to log the Plugin’s “name”.  Usually, this is just the 
SimpleClassName, but if the class name doesn’t match the Plugin name it can do 
something else.  For example, the RootLoggerConfig extends the LoggerConfig 
class so the toString() method does

public String toString() {
    return Strings.isEmpty(name) ? "root" : name;
}
If you set the value to false then 

type.getPluginClass().getName() + " with name " + name
will be printed, where type is the PluginType annotation you declared and name 
is the name of the object, if it has one.
Generally, you should set printObject to true and make sure the toString() 
method does the right thing.  If you are extending AbstractFilter then it 
provides a toString() method for you that does
return this.getClass().getSimpleName();
HTH,
Ralph




> On Aug 27, 2015, at 9:47 PM, Nicholas Duane <nic...@msn.com> wrote:
> 
> While I got my LevelRangeFilter working I didn't get an answer to #1 below.  
> Can someone answer that for me so that I can code appropriately?
> 
> Thanks,
> Nick
> 
>> From: nic...@msn.com
>> To: log4j-user@logging.apache.org
>> Subject: plugins
>> Date: Thu, 27 Aug 2015 14:51:58 -0400
>> 
>> 
>> 
>> 
>> 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
>> 
>> 
>>                                        
>                                         

Reply via email to