Why not reuse the feature that lets log4j automatically reload a
configuration file if it detects the file has changed?

Then we only have to consider what kind of configuration is needed.

Gary

On Fri, Oct 22, 2021, 02:18 Adwait Kumar Singh <
theadvaitkumarsi...@gmail.com> wrote:

> This is a sample Rule I had in mind,
>
> {
> >   "loggerThresholds": {
> >     "a.b.c.Class1": "WARN",
> >     "a.b.c.Class2": "TRACE",
> >     "a.b.c.Class3": "OFF"
> >   },
> >   "allowlistedHosts": [
> >     "a.b.c.us-west-1.com",
> >     "a.b.c.us-west-2.com"
> >   ],
> >   "ruleValidityTime": "2022-01-24T00:03:31.593"
> > }
> >
>
> This basically would filter logging from the given loggers in
> loggerThresholds only on the allowlistedHosts until ruleValidityTime.
>
> The advantage of this over new filters is, new filters require code
> changes, this wouldn't as my intention is to store the rules in some
> configuration store and it would be fetched via the Supplier.
>
> On Fri, Oct 22, 2021 at 7:01 AM Apache <ralph.go...@dslextreme.com> wrote:
>
> > After thinking about this more I can’t quite figure out what the user
> > would be specifying in the configuration. A Java lambda expression? I.e
> > what is the rule syntax? Or are they expected to just configure
> predefined
> > rules with perhaps some variables. But if that is the case how is this
> > really any different than just creating new filters? The only real
> > difference I see is that the Supplier presumably returns a Boolean
> instead
> > of a filter result.
> >
> > Ralph
> >
> > > On Oct 21, 2021, at 4:51 PM, Ralph Goers <ralph.go...@dslextreme.com>
> > wrote:
> > >
> > > This sounds interesting. I might give it a whirl but  firstI am trying
> > to finish up some work on
> > > Apache Flume so it can get a new release and I need to do some other
> > work here as we
> > > are overdue for a release.
> > >
> > > Ralph
> > >
> > >> On Oct 21, 2021, at 11:28 AM, Adwait Kumar Singh <
> > theadvaitkumarsi...@gmail.com> wrote:
> > >>
> > >> The problem I am stuck on is the best way to get the user to provide
> the
> > >> ruleSupplier via configuration.
> > >>
> > >>> On Thu, Oct 21, 2021 at 11:55 PM Adwait Kumar Singh <
> > >>> theadvaitkumarsi...@gmail.com> wrote:
> > >>>
> > >>> Yes I mean filtering on those loggers.
> > >>>
> > >>> I don't expect the Supplier to be dynamically changed, only the rules
> > they
> > >>> are fetching. Something roughly like this
> > >>>
> > >>> public class RuleBaseFilter extends AbstractFilter {
> > >>>
> > >>>   //This will be initialized only once
> > >>>   Supplier<List<Rules>> rulesSupplier;
> > >>>
> > >>>
> > >>> @Override
> > >>>  public Result filter(final Logger logger, final Level level, final
> > >>> Marker marker, final Message msg,
> > >>>      final Throwable t) {
> > >>>       List<Rules> rules = rulesSupplier.get();
> > >>>       //evaluate rules and filter
> > >>> }
> > >>>
> > >>> }
> > >>>
> > >>>
> > >>>
> > >>>
> > >>>
> > >>> On Thu, Oct 21, 2021 at 11:19 PM Ralph Goers <
> > ralph.go...@dslextreme.com>
> > >>> wrote:
> > >>>
> > >>>> Sorry, you have lost me a little bit.
> > >>>>
> > >>>> When you say dynamically turn on/off loggers I am assuming you
> really
> > >>>> mean
> > >>>> enable/disable filtering on those Loggers?
> > >>>>
> > >>>> Are you thinking that the rules can be added or removed dynamically?
> > Or
> > >>>> just the
> > >>>> parameters to the rules? I ask because you can’t really add a
> Supplier
> > >>>> dynamically
> > >>>> if it is part of the configuration. Log4j will process the
> > configuration
> > >>>> only when it is
> > >>>> changed. However, the data they rely on can come from anywhere -
> more
> > or
> > >>>> less
> > >>>> how we use Lookups to evaluate conditions on every log event.
> > >>>>
> > >>>> Ralph
> > >>>>
> > >>>>> On Oct 21, 2021, at 8:44 AM, Adwait Kumar Singh <
> > >>>> theadvaitkumarsi...@gmail.com> wrote:
> > >>>>>
> > >>>>> This is still in the proof of concept phase, but what I am trying
> to
> > do
> > >>>> is
> > >>>>> create a filter which allows developers to dynamically turn on/off
> > >>>> loggers
> > >>>>> based on some parameters without restarting their system. The
> > parameters
> > >>>>> can be varied, like:
> > >>>>> 1. Turn on WARN log levels of a particular class.
> > >>>>> 2. Turn on TRACE logging only on a particular host.
> > >>>>> 3. Turn on DEBUG logs only for requests by a particular client for
> a
> > >>>> short
> > >>>>> duration,
> > >>>>> ... and any combination of such parameters.
> > >>>>>
> > >>>>> The way I was thinking of doing this was creating a filter which
> > takes
> > >>>> in a
> > >>>>> Supplier<Rule> and then evaluates a log event against that rule.
> > >>>>>
> > >>>>> On Thu, Oct 21, 2021 at 7:37 PM Apache <ralph.go...@dslextreme.com
> >
> > >>>> wrote:
> > >>>>>
> > >>>>>> It sounds to me like you want to create a new type of plugin
> > similar to
> > >>>>>> PatternConerters. I am curious as to what your filter does. Is it
> > >>>> something
> > >>>>>> that would be useful to others so that we would be interested in
> > >>>> including
> > >>>>>> it?
> > >>>>>>
> > >>>>>> Ralph
> > >>>>>>
> > >>>>>>> On Oct 21, 2021, at 6:07 AM, Adwait Kumar Singh <
> > >>>>>> theadvaitkumarsi...@gmail.com> wrote:
> > >>>>>>>
> > >>>>>>> I am creating a filter which requires the user to give a
> > >>>> Supplier<Rule>
> > >>>>>> to
> > >>>>>>> fetch some custom rules. I am wondering how to go about getting
> > this
> > >>>>>>> Supplier from the configuration xml.
> > >>>>>>>
> > >>>>>>> One way I have thought of is using some sort of Registry and then
> > just
> > >>>>>>> asking the user to provide a key to lookup into the Registry to
> > fetch
> > >>>> the
> > >>>>>>> Supplier. The user then registers his Supplier to this Registry
> in
> > >>>> Java
> > >>>>>>> code.
> > >>>>>>> What are your thoughts on this and do you guys know of a better
> way
> > >>>> to do
> > >>>>>>> this?
> > >>>>>>>
> > >>>>>>> Thanks,
> > >>>>>>> Adwait.
> > >>>>>>
> > >>>>>>
> > >>>>>>
> > >>>>
> > >>>>
> > >>>>
> > >
> >
> >
> >
>

Reply via email to