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. > > >>>>>> > > >>>>>> > > >>>>>> > > >>>> > > >>>> > > >>>> > > > > > > > > > >