The script filters are already dynamic for script engines. Have you looked at that?
Matt Sicker > On Oct 22, 2021, at 03:22, Gary Gregory <garydgreg...@gmail.com> wrote: > > 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. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>> >>> >>> >>> >>