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