Ohhh, I like setBranch instead of setChildren. I'll let it simmer for a little...
Thoughts from others? Gary On Thu, Aug 27, 2015 at 7:15 AM, Xen <x...@dds.nl> wrote: > Maybe you can call it setBranch() instead, since you are really trying to > set an entire branch of a tree, and you are no so much worried about the > fact that they are children. In other words, the parent is included too. > > > > On Wed, 26 Aug 2015, Gary Gregory wrote: > > On Sat, Aug 22, 2015 at 1:58 PM, Gary Gregory <garydgreg...@gmail.com> >> wrote: >> >> In this case the caller is setChildren, so it would know. I've not >>> experimented with coding this yet though. >>> >>> >> A reminder that this new code has been in for a couple of days and that I >> am not in love with the API name setChildren, so I am open to suggestions. >> >> Gary >> >> >> Gary >>> >>> On Sat, Aug 22, 2015 at 11:10 AM, Ralph Goers < >>> ralph.go...@dslextreme.com> >>> wrote: >>> >>> Yes. Except that puts the burden on the caller to keep track of >>>> everything they modified. >>>> >>>> Ralph >>>> >>>> On Aug 22, 2015, at 9:33 AM, Gary Gregory <garydgreg...@gmail.com> >>>> wrote: >>>> >>>> Furthermore could loggerContext.updateLoggers() be optimized by passing >>>> it the the list of LoggerConfigs we modifed? >>>> >>>> Gary >>>> >>>> On Sat, Aug 22, 2015 at 9:04 AM, Gary Gregory <garydgreg...@gmail.com> >>>> wrote: >>>> >>>> Ah, like this then? >>>>> >>>>> /** >>>>> * Sets the levels of <code>parentLogger</code> and all 'child' >>>>> loggers to the given <code>level</level>. >>>>> * @param parentLogger the parent logger >>>>> * @param level the new level >>>>> */ >>>>> public static void setChildren(final String parentLogger, final >>>>> Level level) { >>>>> // get logger config >>>>> // if exact match? Use it, if not, create it. >>>>> // set level >>>>> // update loggers >>>>> final LoggerContext loggerContext = >>>>> LoggerContext.getContext(false); >>>>> final Configuration config = loggerContext.getConfiguration(); >>>>> boolean set = setLevel(parentLogger, level, config); >>>>> final Map<String, LoggerConfig> loggerConfigMap = >>>>> config.getLoggers(); >>>>> for (Map.Entry<String, LoggerConfig> entry : >>>>> loggerConfigMap.entrySet()) { >>>>> if (entry.getKey().startsWith(parentLogger)) { >>>>> set |= setLevel(entry.getValue(), level); >>>>> } >>>>> } >>>>> if (set) { >>>>> loggerContext.updateLoggers(); >>>>> } >>>>> } >>>>> >>>>> Gary >>>>> >>>>> On Sat, Aug 22, 2015 at 8:19 AM, Gary Gregory <garydgreg...@gmail.com> >>>>> wrote: >>>>> >>>>> Let's say I have >>>>>> >>>>>> Logger com = ERROR (or even just the root Logger at ERROR). >>>>>> >>>>>> and I want Logger com.domain.foo and all its children set to DEBUG >>>>>> >>>>>> If I get the LoggerConfig that matches the parent logger and call >>>>>> setLevel on that, I will end up with Logger com at DEBUG, won't I? >>>>>> >>>>>> Gary >>>>>> >>>>>> On Fri, Aug 21, 2015 at 9:53 PM, Ralph Goers < >>>>>> ralph.go...@dslextreme.com> wrote: >>>>>> >>>>>> That is definitely not how to implement it. >>>>>>> >>>>>>> You should get the LoggerConfig that matches your parent logger and >>>>>>> call setLevel on that. Then loop through all the loggerConfigs that >>>>>>> start >>>>>>> with the located LoggerConfigs name and then call setLevel on them. >>>>>>> You >>>>>>> typically aren’t going to have many LoggerConfigs while you could >>>>>>> have >>>>>>> thousands of Loggers, which all resolve to the same LoggerConfig. >>>>>>> >>>>>>> Ralph >>>>>>> >>>>>>> On Aug 21, 2015, at 9:30 PM, Gary Gregory <garydgreg...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>> On Wed, Aug 19, 2015 at 7:59 PM, Gary Gregory < >>>>>>> garydgreg...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>> On Sat, Aug 15, 2015 at 3:56 PM, Gary Gregory < >>>>>>>> garydgreg...@gmail.com >>>>>>>> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>> >>>>>>>> On Sat, Aug 15, 2015 at 3:07 PM, Ralph Goers < >>>>>>>>> ralph.go...@dslextreme.com> wrote: >>>>>>>>> >>>>>>>>> Why do you want to set the level on the LoggerConfig and all its >>>>>>>>>> descendants? >>>>>>>>>> >>>>>>>>>> >>>>>>>>> Because I clearly did not educate myself fully in this topic. ;-) >>>>>>>>> Hence I am looking for a shortcut by asking on the ML :-) >>>>>>>>> >>>>>>>>> >>>>>>>>> Setting the level just on the LoggerConfig will achieve the same >>>>>>>>>> thing, so long as none of its descendants has a LoggerConfig >>>>>>>>>> >>>>>>>>>> >>>>>>>>> That's cool, but... How can I know if any descendant has a >>>>>>>>> LoggerConfig? How can do this generically? >>>>>>>>> >>>>>>>>> >>>>>>>> Here is my proposal (including a test): >>>>>>>> https://issues.apache.org/jira/secure/attachment/12751400/log4j.diff >>>>>>>> >>>>>>>> I am not crazy about the API name: setChildren(String loggerName, >>>>>>>> Level level). >>>>>>>> >>>>>>>> Thoughts? >>>>>>>> >>>>>>>> >>>>>>> Anyone? Bueller? :-) >>>>>>> >>>>>>> >>>>>>> >>>>>>>> Gary >>>>>>>> >>>>>>>> >>>>>>>> Gary >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> Sent from my iPad >>>>>>>>>> >>>>>>>>>> On Aug 15, 2015, at 8:25 AM, Gary Gregory <garydgreg...@gmail.com >>>>>>>>>> > >>>>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Let's say I have a logger tree like: >>>>>>>>>> >>>>>>>>>> R >>>>>>>>>> R.P >>>>>>>>>> R.P.C1 >>>>>>>>>> R.P.C1.L1 >>>>>>>>>> R.P.C2.L2 >>>>>>>>>> R.P.C2 >>>>>>>>>> R.P.C2.L1 >>>>>>>>>> R.P.C2.L2 >>>>>>>>>> >>>>>>>>>> and I want to set R.P.C2 and all it's descendants to a given >>>>>>>>>> level. >>>>>>>>>> >>>>>>>>>> In Log4j 1.2, I do: >>>>>>>>>> >>>>>>>>>> public static void setChildren(final Logger parentLogger, >>>>>>>>>> final Level newLevel) { >>>>>>>>>> final Enumeration<Logger> enumeration = >>>>>>>>>> LogManager.getCurrentLoggers(); >>>>>>>>>> while (enumeration.hasMoreElements()) { >>>>>>>>>> final Logger logger = enumeration.nextElement(); >>>>>>>>>> if (LoggerUtils.isChild(parentLogger, logger)) { >>>>>>>>>> logger.setLevel(newLevel); >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> private static boolean isChild(final Logger parentCandidate, >>>>>>>>>> final Logger childCandidate) { >>>>>>>>>> for (Category c = childCandidate; c != null; c = >>>>>>>>>> c.getParent()) { >>>>>>>>>> if (c.equals(parentCandidate)) { >>>>>>>>>> return true; >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> return false; >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> I suppose I could determine parent/child with a startWith on the >>>>>>>>>> logger name too. >>>>>>>>>> >>>>>>>>>> I there a better way to do this with the Core in v2 aside from >>>>>>>>>> iterating over all loggers in a context and doing a kind of >>>>>>>>>> isChild()? Can >>>>>>>>>> additivity be used for this? >>>>>>>>>> >>>>>>>>>> I'd like to add such a utility method to Configurator. >>>>>>>>>> >>>>>>>>>> Gary >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>>>>>>>> <ggreg...@apache.org> >>>>>>>>>> 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 >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>>>>>>> <ggreg...@apache.org> >>>>>>>>> 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 >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>>>>>> <ggreg...@apache.org> >>>>>>>> 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 >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>>>>> <ggreg...@apache.org> >>>>>>> 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 >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> -- >>>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>>>> 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 >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>>> 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 >>>>> >>>>> >>>> >>>> >>>> -- >>>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>>> 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 >>>> >>>> >>>> >>>> >>> >>> -- >>> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >>> 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 >>> >>> >> >> >> -- >> E-Mail: garydgreg...@gmail.com | ggreg...@apache.org >> 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: log4j-dev-unsubscr...@logging.apache.org > For additional commands, e-mail: log4j-dev-h...@logging.apache.org > -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org 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