LoggerContext is included in log4j-api as an SPI class. It's for implementors, not users.
On 22 August 2017 at 12:22, Gary Gregory <garydgreg...@gmail.com> wrote: > On Tue, Aug 22, 2017 at 10:27 AM, Remko Popma <remko.po...@gmail.com> > wrote: > > > What I don't like about this proposal is that LogManager.getLogger(Class) > > would end up working differently than > > o.a.l.l.core.LoggerContext.getLogger(Class). (One uses Class.getName, > the > > other Class.getCanonicalName.) > > > > No it would not, LogManager now uses getCanonicalName() based on last > week's discussion. The shorthand APIs should all use getCanonicalName() > now. > > > > > > Why not just use org.apache.logging.log4j.core. > > LoggerContext.getLogger(clazz.getCanonicalName()) in your application? > > > > Because that leave open the original problem, it's too easy to mess up and > call getName(). This is a shorthand API just like > LogManager.getLogger(Class). I always want to call an API that takes a > Class where I can to avoid the mix up. > > Gary > > > > > On Wed, Aug 23, 2017 at 12:32 AM, Gary Gregory <garydgreg...@gmail.com> > > wrote: > > > > > Hi Ralph, > > > > > > I looked over the links and I (still) do understand the separation and > I > > > have a follow up question below. > > > > > > First, to be precise, I am proposing to add this shorthand method (note > > > there is no @Override to ease compatibility, so no change to > > > org.apache.logging.log4j.spi.LoggerContext): > > > > > > diff --git > > > a/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > > LoggerContext.java > > > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > > LoggerContext.java > > > index cd15dce..8002853 100644 > > > --- > > > a/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > > LoggerContext.java > > > +++ > > > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > > > LoggerContext.java > > > @@ -410,6 +410,17 @@ > > > } > > > > > > /** > > > + * Returns a Logger using the fully qualified name of the Class as > > the > > > Logger name. > > > + * > > > + * @param clazz The Class whose name should be used as the Logger > > > name. If null it will default to the calling > > > + * class. > > > + * @return The Logger. > > > + */ > > > + public Logger getLogger(final Class<?> clazz) { > > > + return getLogger(clazz.getCanonicalName(), null); > > > + } > > > + > > > + /** > > > * Gets a Logger from the Context. > > > * > > > * @param name The name of the Logger to return. > > > > > > Regardless of the above, would you say that the interface > > > org.apache.logging.log4j.spi.LoggerContext is also "out of bounds" for > > > normal/non-advanced use cases of "get me a logger" even though it is in > > the > > > log4j-api module? > > > > > > Thank you again! > > > Gary > > > > > > > > > On Mon, Aug 21, 2017 at 10:34 PM, Gary Gregory <garydgreg...@gmail.com > > > > > wrote: > > > > > > > On Mon, Aug 21, 2017 at 10:27 PM, Ralph Goers < > > > ralph.go...@dslextreme.com> > > > > wrote: > > > > > > > >> I would say look at http://logging.apache.org/log4j/2.x/ < > > > >> http://logging.apache.org/log4j/2.x/> and that paragraph entitled > > “API > > > >> Separation”. Then look at http://logging.apache.org/log4 > > > >> j/2.x/manual/api.html <http://logging.apache.org/log > > > >> 4j/2.x/manual/api.html>. The first paragraph makes it clear what our > > > >> intent is. It should be telling that nowhere on that page is the > > > >> LoggerContext mentioned. It isn’t until you get to the Configuration > > > >> section that LoggerContext APIs are discussed. > > > >> > > > >> So the intent of the design is that code that is performing logging > > > >> sticks to the Log4j API - providing it with a guarantee of backward > > > >> compatibility. In a lot of cases no custom configuration is needed > and > > > so > > > >> the whole application will be compatible no matter what we change > > > >> internally. That doesn’t mean that getLogger() cannot be called - > but > > > IMO > > > >> applications should never be calling it for “normal" logging > > operations. > > > >> > > > >> All of that said, I wouldn’t veto a code commit to do what you want. > > It > > > >> is just not something I’d consider as a worst practice if I found it > > in > > > >> someone’s code for “normal” logging and I would strongly recommend > > they > > > >> change it. > > > >> > > > > > > > > Thanks for the details. I'll read up on the links and sleep on it. > > > > > > > > Gary > > > > > > > > > > > >> > > > >> Ralph > > > >> > > > >> > On Aug 21, 2017, at 6:45 PM, Gary Gregory <garydgreg...@gmail.com > > > > > >> wrote: > > > >> > > > > >> > Hi Ralph, > > > >> > > > > >> > Would you say that is your opinion or the intent of the design? > And > > if > > > >> the > > > >> > latter, should we adjust the Javadoc accordingly. > > > >> > > > > >> > Gary > > > >> > > > > >> > On Mon, Aug 21, 2017 at 7:31 PM, Ralph Goers < > > > >> ralph.go...@dslextreme.com> > > > >> > wrote: > > > >> > > > > >> >> I am against encouraging users to directly acquire a Logger. > > > >> >> > > > >> >> Ralph > > > >> >> > > > >> >> > > > >> >>> On Aug 21, 2017, at 5:24 PM, Gary Gregory < > garydgreg...@gmail.com > > > > > > >> >> wrote: > > > >> >>> > > > >> >>> On Mon, Aug 21, 2017 at 6:01 PM, Ralph Goers < > > > >> ralph.go...@dslextreme.com > > > >> >>> > > > >> >>> wrote: > > > >> >>> > > > >> >>>> It is actually funny that you say that. The API we provide for > > > >> >> performing > > > >> >>>> logging is log4j-api, not log4j-core. We provide access in > > > log4j-core > > > >> >> for > > > >> >>>> users to customize how they configure their logging - not > perform > > > it. > > > >> >>>> > > > >> >>> > > > >> >>> I'm all about humoring the ML :-) > > > >> >>> > > > >> >>> Any further thoughts on adding these APIs? For or against? > > > >> >>> > > > >> >>> Gary > > > >> >>> > > > >> >>>> > > > >> >>>> Ralph > > > >> >>>> > > > >> >>>>> On Aug 21, 2017, at 3:42 PM, Gary Gregory < > > garydgreg...@gmail.com > > > > > > > >> >>>> wrote: > > > >> >>>>> > > > >> >>>>> Hi, > > > >> >>>>> > > > >> >>>>> When someone calls any of the init methods like > > > >> >>>>> org.apache.logging.log4j.core.config.Configurator.initialize > > > >> (String, > > > >> >>>>> ClassLoader, String), you get a Core LoggerContext, and that's > > > what > > > >> >>>> you've > > > >> >>>>> got to work with... Why is that a bad idea? That's the API we > > > >> provide. > > > >> >>>>> > > > >> >>>>> Gary > > > >> >>>>> > > > >> >>>>> On Mon, Aug 21, 2017 at 4:30 PM, Ralph Goers < > > > >> >> ralph.go...@dslextreme.com > > > >> >>>>> > > > >> >>>>> wrote: > > > >> >>>>> > > > >> >>>>>> So you are saying that your application is getting Loggers by > > > doing > > > >> >>>>>> LoggerContext.getLogger()? I guess I don’t really understand > > why > > > >> that > > > >> >>>> is a > > > >> >>>>>> good idea. Are you saying you have your own custom > > LoggerContext > > > >> and > > > >> >>>> that > > > >> >>>>>> you want to modify Log4j’s LoggerContext simply so you can > > modify > > > >> >> yours? > > > >> >>>>>> > > > >> >>>>>> Ralph > > > >> >>>>>> > > > >> >>>>>>> On Aug 21, 2017, at 3:01 PM, Gary Gregory < > > > garydgreg...@gmail.com > > > >> > > > > >> >>>>>> wrote: > > > >> >>>>>>> > > > >> >>>>>>> My use case is that deep in the guts and call stack of my > > > >> >> server/app, I > > > >> >>>>>>> have a specific Core LoggerContext that I should/must use. > > Log4j > > > >> and > > > >> >>>>>> other > > > >> >>>>>>> components must co-exist in a long-lived server that have > > > modules > > > >> >> that > > > >> >>>>>> are > > > >> >>>>>>> constantly re-initialized/re-configured during development > and > > > >> >> testing > > > >> >>>>>>> phases. During acceptance and production, the are fewer > > > >> >>>> reconfigurations, > > > >> >>>>>>> but they do happen. The bottom line is that most logging > code > > > >> dishes > > > >> >>>> out > > > >> >>>>>>> Loggers out of specific LoggerContext instances and not out > of > > > the > > > >> >>>>>>> LogManager classes (only in a few rare places.) > > > >> >>>>>>> > > > >> >>>>>>> Gary > > > >> >>>>>>> > > > >> >>>>>>> On Mon, Aug 21, 2017 at 3:47 PM, Ralph Goers < > > > >> >>>> ralph.go...@dslextreme.com > > > >> >>>>>>> > > > >> >>>>>>> wrote: > > > >> >>>>>>> > > > >> >>>>>>>> Did you ask this question last week? Why is it needed? Why > > > can’t > > > >> >> this > > > >> >>>>>> be > > > >> >>>>>>>> handled in LogManager? > > > >> >>>>>>>> > > > >> >>>>>>>> Ralph > > > >> >>>>>>>> > > > >> >>>>>>>>> On Aug 21, 2017, at 2:10 PM, Gary Gregory < > > > >> garydgreg...@gmail.com> > > > >> >>>>>>>> wrote: > > > >> >>>>>>>>> > > > >> >>>>>>>>> Hi All: > > > >> >>>>>>>>> > > > >> >>>>>>>>> I have a need for the shortcut method > > > >> >>>>>>>>> org.apache.logging.log4j.core.LoggerContext > > getLogger(Class) > > > >> which > > > >> >>>>>> would > > > >> >>>>>>>>> use getCannonicalName(). > > > >> >>>>>>>>> > > > >> >>>>>>>>> Any objection to adding that? > > > >> >>>>>>>>> > > > >> >>>>>>>>> Gary > > > >> >>>>>>>> > > > >> >>>>>>>> > > > >> >>>>>>>> > > > >> >>>>>> > > > >> >>>>>> > > > >> >>>>>> > > > >> >>>> > > > >> >>>> > > > >> >>>> > > > >> >> > > > >> >> > > > >> >> > > > >> > > > >> > > > > > > > > > > -- Matt Sicker <boa...@gmail.com>