Ah! Tricky stuff, that typing ;-) Committed.
Gary On Thu, Aug 27, 2015 at 12:44 PM, Ralph Goers <ralph.go...@dslextreme.com> wrote: > No. Autocorrect at work. Should have been “Sounds” > > Ralph > > On Aug 27, 2015, at 12:24 PM, Gary Gregory <garydgreg...@gmail.com> wrote: > > Pardon my lack of urban engagement ;-) but do you mean "Spuds" as in > http://www.urbandictionary.com/define.php?term=Spud+Me > > Gary > > On Thu, Aug 27, 2015 at 12:07 PM, Ralph Goers <ralph.go...@dslextreme.com> > wrote: > >> Spuds ok to me >> >> Sent from my iPad >> >> On Aug 27, 2015, at 11:49 AM, Gary Gregory <garydgreg...@gmail.com> >> wrote: >> >> setAllChildLevels is nice and explicit, but like setChildren it does not >> convey the fact that the API sets the _given_ level _and_ its children. >> >> Maybe setAllLevels(String, Level) ? >> >> Gary >> >> On Thu, Aug 27, 2015 at 11:24 AM, Ralph Goers <ralph.go...@dslextreme.com >> > wrote: >> >>> setBranch doesn’t resonate with me. Partly the problem is that you >>> don’t identify what is being set in the name. I would actually prefer >>> something like setAllChildLevels. >>> >>> Ralph >>> >>> On Aug 27, 2015, at 11:17 AM, Gary Gregory <garydgreg...@gmail.com> >>> wrote: >>> >>> 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 >>> >>> >>> >> >> >> -- >> 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