On Wed, Aug 26, 2015 at 10:52 AM, Nicholas Duane <[email protected]> wrote:

> This is my main issue.  If someone, Remko maybe?, has a solution using
> composite and threshold please let me know as so far I have been unable to
> make it work using those.  My next step would be to write my own
> LevelRangeFilter.
>

I think a LevelRangeFilter is a good idea anyway, so Log4j should provide
one. Writing one is easy, it's docs will take longer to write well.

Gary

>
> Thanks,
> Nick
>
> > From: [email protected]
> > To: [email protected]
> > Subject: RE: range filter?
> > Date: Wed, 26 Aug 2015 10:41:27 -0400
> >
> > Thanks for clarifying.
> >
> > My effort to try to get the composite + threshold filter working such
> that I can filter a single level so far has failed.  Here is my code:
> >
> > import org.apache.logging.log4j.LogManager;
> > import org.apache.logging.log4j.Logger;
> > import org.apache.logging.log4j.Level;
> >
> > public class HelloWorld
> > {
> >     static Logger log = LogManager.getLogger(HelloWorld.class.getName());
> >
> >     public static void main(String[] args)
> >     {
> >       System.out.println("Hello, World");
> >       log.info("hello this is an INFO  message");
> >       log.warn("hello this is a WARN message");
> >       log.debug("hello this is a DEBUG message");
> >       Level level = Level.getLevel("INFOM1");
> >       if (level == null)
> >          System.out.println("Didn't find level INFOM1");
> >       else
> >         log.log(level, "hello this is an INFOM1 message");
> >       level = Level.getLevel("INFOP1");
> >       if (level == null)
> >         System.out.println("Didn't find level INFOP1");
> >       else
> >         log.log(level, "hello this is an INFOP1 message");
> >     }
> > }
> >
> > Here is my configuration file:
> >
> > <?xml version="1.0" encoding="UTF-8"?>
> > <Configuration status="trace" verbose="true">
> >   <CustomLevels>
> >     <CustomLevel name="INFOM1" intLevel="399"/>
> >     <CustomLevel name="INFOP1" intLevel="401"/>
> >   </CustomLevels>
> >   <Appenders>
> >     <File name="info" fileName="info.log">
> >       <PatternLayout>
> >     <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
> >       </PatternLayout>
> >       <Filters>
> >     <ThresholdFilter level="INFOM1" onMatch="DENY" onMismatch="NEUTRAL"/>
> >     <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
> >       </Filters>
> >     </File>
> >   </Appenders>
> >   <Loggers>
> >     <Logger name="HelloWorld" level="ALL">
> >       <AppenderRef ref="info"/>
> >     </Logger>
> >     <Root>
> >     </Root>
> >   </Loggers>
> > </Configuration>
> >
> > NOTE: The custom levels are not being found by the code as I'm seeing my
> messages to stdout that it couldn't find INFOM1 and INFOP1.
> >
> > Any suggestion on how to get filtering of a single level working with
> the composite filter + threshold filter?
> >
> > Thanks,
> > Nick
> >
> > > Subject: Re: range filter?
> > > From: [email protected]
> > > Date: Wed, 26 Aug 2015 07:05:35 -0700
> > > To: [email protected]
> > >
> > > I apologize, you are correct. The level values do decrease.
> > >
> > > Regardless, your point about wanting to filter on essentially a single
> integer value makes sense.
> > >
> > > Ralph
> > >
> > > > On Aug 26, 2015, at 6:12 AM, Nicholas Duane <[email protected]> wrote:
> > > >
> > > > Hmmm, I thought for log4j the threshold was less than or equal to
> the level.  For instance, if the threshold is INFO then INFO and less than,
> eg more critical like WARN ERROR and FATAL would match.  It's opposite in
> log4net.  Regardless, this is the issue I wanted to point out.  The
> stackoverflow article doesn't filter only INFO level, it seems it filters
> INFO and anything between INFO and WARN but not including WARN.
> > > >
> > > > If I want just a single level then I would like a way to specify
> that without me having to potentially go back and edit the configuration if
> someone decides to specify a custom level via configuration or code.  The
> LevelRangeFilter provides an easy mechanism for me to do this by specifying
> the same level for min and max.  I guess you're suggesting I could
> accomplish this via the composite filter and the threshold filter, however,
> I would have to define a custom level that is one less than or one more
> than the level I'm looking to capture so that I ensure I'm only getting
> that one level.  I will try this out, but it would be nice to have
> something like the LevelRangeFilter.
> > > >
> > > > Thanks,
> > > > Nick
> > > >
> > > >> Subject: Re: range filter?
> > > >> From: [email protected]
> > > >> Date: Tue, 25 Aug 2015 22:08:01 -0700
> > > >> To: [email protected]
> > > >>
> > > >> No. If the custom level was 1 greater than INFO, then yes. In that
> case you would specify your custom level instead of WARN as the level on
> the first ThresholdFilter.
> > > >>
> > > >> Ralph
> > > >>
> > > >>> On Aug 25, 2015, at 9:39 PM, Nicholas Duane <[email protected]>
> wrote:
> > > >>>
> > > >>> What if someone defined a custom level one less than INFO?
> Wouldn't that end up in the log also?
> > > >>> Thanks,Nick
> > > >>>
> > > >>> -------- Original message --------
> > > >>> From: Ralph Goers <[email protected]>
> > > >>> Date: 08/25/2015  10:28 PM  (GMT-07:00)
> > > >>> To: Log4J Users List <[email protected]>
> > > >>> Subject: Re: range filter?
> > > >>>
> > > >>> I just did.
> > > >>>
> > > >>> Ralph
> > > >>>
> > > >>>> On Aug 25, 2015, at 9:12 PM, Nicholas Duane <[email protected]>
> wrote:
> > > >>>>
> > > >>>> That's exactly the use case I'm looking for.  I'll have to study
> it some more.  Can you give me an example which filters out everything but
> INFO?
> > > >>>> Thanks,Nick
> > > >>>>
> > > >>>> -------- Original message --------
> > > >>>> From: Remko Popma <[email protected]>
> > > >>>> Date: 08/25/2015  9:06 PM  (GMT-07:00)
> > > >>>> To: Log4J Users List <[email protected]>
> > > >>>> Subject: Re: range filter?
> > > >>>>
> > > >>>>
> > > >>>> The StackOverflow link was an answer to the question "how to send
> _only_ INFO level events to an appender".
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> I thought it would illustrate how filters combinations could be
> used to achieve the original request: "I might want all DEBUG, TRACE and
> VERBOSE events going to one appender.  All INFO, ERROR and WARN events
> going to another appender. All BUSINESS events (my custom) level, going to
> yet another appender."
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> Seemed to me to be a similar use case to the SO question.
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>> Sent from my iPhone
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>> On 2015/08/26, at 11:44, Ralph Goers <[email protected]>
> wrote:
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>> I am not sure why Remko advised you to do it this way.  The
> first filter will deny Warn, error and fatal making the next two filters
> redundant. The third filter will accept events at level info and deny trace
> and debug.  So the end result is the only events that will get logged will
> be those at INFO level.
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>> The composite filter really just wraps other filters and returns
> whatever result they generate. For example, if the first filter returns
> accept or deny then that value will be returned as the result without
> consulting any other filters. If the result is neutral then the second
> filter will be used to see if the event passes that.
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>> Ralph
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>>> On Aug 25, 2015, at 7:09 PM, Nicholas Duane <[email protected]>
> wrote:
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>> Maybe.  However, I'm having a hard time following what the
> configuration is saying and thus have no idea what I would need to put in
> the configuration.  Here is a snippet from that post:
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>>         <!-- Now deny warn, error and fatal messages -->
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>>                    <ThresholdFilter level="warn"
> onMatch="DENY"   onMismatch="NEUTRAL"/>
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>>         <ThresholdFilter level="error" onMatch="DENY"
>  onMismatch="NEUTRAL"/>
> > > >>>>
> > > >>>>>>         <ThresholdFilter level="fatal" onMatch="DENY"
>  onMismatch="NEUTRAL"/>
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>>          <!-- This filter accepts info, warn, error, fatal and
> denies debug/trace -->
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>>          <ThresholdFilter level="info"  onMatch="ACCEPT"
> onMismatch="DENY"/>
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>> The top three seem as if they would deny warn, error and fatal,
> yet the third says it accepts info, warn, error and fatal.  And while I
> understand those in isolation, I think, I have no idea how the <filters>
> composite would handle this.  Why are the first three needed?  How does the
> CompositeFilter work?  Does it try to match on each filter in the list of
> stop as soon as it gets a DENY?
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>> What if I wanted to setup a filter which just accepted WARN?
> And on top of that ensure that if anyone defined any custom levels which
> are maybe just 1 away from WARN in either direction that those don't make
> it in the appender.  How would you do that?
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>> How I did this with the log4net LevelRangeFilter was to set the
> levelMin and levelMax to the same value.
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>> Thanks,
> > > >>>>
> > > >>>>>> Nick
> > > >>>>
> > > >>>>>>
> > > >>>>
> > > >>>>>>> Subject: Re: range filter?
> > > >>>>
> > > >>>>>>> From: [email protected]
> > > >>>>
> > > >>>>>>> Date: Wed, 26 Aug 2015 09:12:29 +0900
> > > >>>>
> > > >>>>>>> To: [email protected]
> > > >>>>
> > > >>>>>>>
> > > >>>>
> > > >>>>>>> You misread the comment. The commentor basically told me the
> answer works with a minor change, and that he would mark the question as
> "done" if I would edit my answer (which I did).
> > > >>>>
> > > >>>>>>>
> > > >>>>
> > > >>>>>>> So the answer works and seems to apply to your use case, no?
> The question is if it also works with custom levels.
> > > >>>>
> > > >>>>>>>
> > > >>>>
> > > >>>>>>> Sent from my iPhone
> > > >>>>
> > > >>>>>>>
> > > >>>>
> > > >>>>>>>> On 2015/08/26, at 8:49, Nicholas Duane <[email protected]>
> wrote:
> > > >>>>
> > > >>>>>>>>
> > > >>>>
> > > >>>>>>>> Thanks.  I checked out the link.  It seems they were trying
> to do something similar to me.  I see the last comment on that is that it
> doesn't work.
> > > >>>>
> > > >>>>>>>>
> > > >>>>
> > > >>>>>>>> There is another post afterwards which uses the
> ThresholdFilter.  However the ThresholdFilter won't work as that allows, or
> denys, all levels greater than or equal to or less than or equal to the
> level.  I need to filter a specific range of levels.
> > > >>>>
> > > >>>>>>>>
> > > >>>>
> > > >>>>>>>> Thanks,
> > > >>>>
> > > >>>>>>>> Nick
> > > >>>>
> > > >>>>>>>>
> > > >>>>
> > > >>>>>>>>> Date: Wed, 26 Aug 2015 08:27:04 +0900
> > > >>>>
> > > >>>>>>>>> Subject: Re: range filter?
> > > >>>>
> > > >>>>>>>>> From: [email protected]
> > > >>>>
> > > >>>>>>>>> To: [email protected]
> > > >>>>
> > > >>>>>>>>>
> > > >>>>
> > > >>>>>>>>> Can you try something similar to this
> > > >>>>
> > > >>>>>>>>>
> http://stackoverflow.com/questions/24695133/log4j2-filter-particular-level-in-apender/24697002#24697002
> > > >>>>
> > > >>>>>>>>> and see if that works with custom levels as well?
> > > >>>>
> > > >>>>>>>>>
> > > >>>>
> > > >>>>>>>>>> On Wed, Aug 26, 2015 at 6:04 AM, Nicholas Duane <
> [email protected]> wrote:
> > > >>>>
> > > >>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>> I've tried a couple different combinations and so far no
> luck.  Here's
> > > >>>>
> > > >>>>>>>>>> the current configuration I tested with which doesn't work:
> > > >>>>
> > > >>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>> <File ...>
> > > >>>>
> > > >>>>>>>>>> <PatternLayout>
> > > >>>>
> > > >>>>>>>>>>   ...
> > > >>>>
> > > >>>>>>>>>> </PatternLayout>
> > > >>>>
> > > >>>>>>>>>> <Filters>
> > > >>>>
> > > >>>>>>>>>>   <ThresholdFilter level="INFO" onMatch="DENY"/>
> > > >>>>
> > > >>>>>>>>>>   <ThresholdFilter level="DEBUG" onMatch="ACCEPT"/>
> > > >>>>
> > > >>>>>>>>>> </Filters>
> > > >>>>
> > > >>>>>>>>>> </File>
> > > >>>>
> > > >>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>> The
> > > >>>>
> > > >>>>>>>>>> use case for why I want such a filter is to forward a range
> of events
> > > >>>>
> > > >>>>>>>>>> to an appender.  The threshold filter won't work because it
> will send
> > > >>>>
> > > >>>>>>>>>> all events matching a certain level and lower to the
> appender.  For
> > > >>>>
> > > >>>>>>>>>> instance, I might want all DEBUG, TRACE and VERBOSE events
> going to one
> > > >>>>
> > > >>>>>>>>>> appender.  All INFO, ERROR and WARN events going to another
> appender.
> > > >>>>
> > > >>>>>>>>>> All BUSINESS events (my custom) level, going to yet another
> appender.
> > > >>>>
> > > >>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>> Thanks,
> > > >>>>
> > > >>>>>>>>>> Nick
> > > >>>>
> > > >>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>> Date: Tue, 25 Aug 2015 13:17:44 -0700
> > > >>>>
> > > >>>>>>>>>>> Subject: Re: range filter?
> > > >>>>
> > > >>>>>>>>>>> From: [email protected]
> > > >>>>
> > > >>>>>>>>>>> To: [email protected]
> > > >>>>
> > > >>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>> When you get it working, it sounds like it would make a
> nice addition to
> > > >>>>
> > > >>>>>>>>>>> the FAQ with a description of your use case.
> > > >>>>
> > > >>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>> Gary
> > > >>>>
> > > >>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>> On Tue, Aug 25, 2015 at 1:11 PM, Ralph Goers <
> [email protected]
> > > >>>>
> > > >>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>> wrote:
> > > >>>>
> > > >>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>> I believe two threshold filters inside a composite filter
> should should
> > > >>>>
> > > >>>>>>>>>>>> work provided you have the onMatch and onMismatch set
> appropriately.
> > > >>>>
> > > >>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>> Ralph
> > > >>>>
> > > >>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>>> On Aug 25, 2015, at 12:36 PM, Nicholas Duane <
> [email protected]> wrote:
> > > >>>>
> > > >>>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>>> I'm looking for a range filter in log4j2.  I see there
> is on in
> > > >>>>
> > > >>>>>>>>>> log4net
> > > >>>>
> > > >>>>>>>>>>>> and it appears there was one written by someone for log4j
> 1.  Just
> > > >>>>
> > > >>>>>>>>>>>> wondering if there is something 'out of the box' in
> log4j2 that will
> > > >>>>
> > > >>>>>>>>>>>> accomplish the same?  I was wondering whether this could
> be
> > > >>>>
> > > >>>>>>>>>> accomplished
> > > >>>>
> > > >>>>>>>>>>>> with the CompositeFilter with two ThresholdFilter?
> > > >>>>
> > > >>>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>>> Thanks,
> > > >>>>
> > > >>>>>>>>>>>>> Nick
> > > >>>>
> > > >>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>>
> ---------------------------------------------------------------------
> > > >>>>
> > > >>>>>>>>>>>> To unsubscribe, e-mail:
> [email protected]
> > > >>>>
> > > >>>>>>>>>>>> For additional commands, e-mail:
> [email protected]
> > > >>>>
> > > >>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>>
> > > >>>>
> > > >>>>>>>>>>> --
> > > >>>>
> > > >>>>>>>>>>> E-Mail: [email protected] | [email protected]
> > > >>>>
> > > >>>>>>>>>>> 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
> > > >>>>
> > > >>>>>>>
> > > >>>>
> > > >>>>>>>
> ---------------------------------------------------------------------
> > > >>>>
> > > >>>>>>> To unsubscribe, e-mail:
> [email protected]
> > > >>>>
> > > >>>>>>> For additional commands, e-mail:
> [email protected]
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>>
> ---------------------------------------------------------------------
> > > >>>>
> > > >>>>> To unsubscribe, e-mail:
> [email protected]
> > > >>>>
> > > >>>>> For additional commands, e-mail:
> [email protected]
> > > >>>>
> > > >>>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> ---------------------------------------------------------------------
> > > >>>>
> > > >>>> To unsubscribe, e-mail: [email protected]
> > > >>>>
> > > >>>> For additional commands, e-mail:
> [email protected]
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>>
> > > >>>
> > > >>>
> > > >>>
> > > >>>
> ---------------------------------------------------------------------
> > > >>> To unsubscribe, e-mail: [email protected]
> > > >>> For additional commands, e-mail:
> [email protected]
> > > >>>
> > > >>
> > > >>
> > > >>
> > > >>
> ---------------------------------------------------------------------
> > > >> To unsubscribe, e-mail: [email protected]
> > > >> For additional commands, e-mail: [email protected]
> > > >>
> > > >
> > >
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [email protected]
> > > For additional commands, e-mail: [email protected]
> > >
> >
>
>



-- 
E-Mail: [email protected] | [email protected]
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

Reply via email to