Maybe the smallest feature we could/should start with it a class-level @ClassLogger() annotation which create a static final Logger initialized with the class name. Too bad Java does not have what Smalltalk calls class instance variables.
I am using "ClassLogger" like JUnit has ClassRule so it leave room for a @Logger like JUnit has @Rule. Gary On Thu, Jul 19, 2018 at 11:43 AM Rob Tompkins <chtom...@gmail.com> wrote: > > > > On Jul 19, 2018, at 1:41 PM, Ralph Goers <ralph.go...@dslextreme.com> > wrote: > > > > To be clear, Log4j-core should have no required dependencies other than > Log4j-API. And we would like to keep optional dependencies to a minimum. > > Right that makes sense to me. Hence it being an after thought, and I like > Gary’s suggestion of a compile time dependency for the sake of weaving. > > > > > Ralph > > > >> On Jul 19, 2018, at 10:36 AM, Gary Gregory <garydgreg...@gmail.com> > wrote: > >> > >> eOn Thu, Jul 19, 2018 at 10:19 AM Rob Tompkins <chtom...@gmail.com > <mailto:chtom...@gmail.com>> wrote: > >> > >>> > >>> > >>>> On Jul 19, 2018, at 11:48 AM, Gary Gregory <garydgreg...@gmail.com> > >>> wrote: > >>>> > >>>> FTR: https://projectlombok.org/features/log > >>>> > >>>> On Thu, Jul 19, 2018 at 8:48 AM Gary Gregory <garydgreg...@gmail.com> > >>> wrote: > >>>> > >>>>> > >>>>> > >>>>> On Thu, Jul 19, 2018 at 8:26 AM Rob Tompkins <chtom...@gmail.com> > >>> wrote: > >>>>> > >>>>>> > >>>>>> > >>>>>>> On Jul 19, 2018, at 10:17 AM, Gary Gregory <garydgreg...@gmail.com > > > >>>>>> wrote: > >>>>>>> > >>>>>>> On Thu, Jul 19, 2018 at 8:07 AM Rob Tompkins <chtom...@gmail.com> > >>>>>> wrote: > >>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>>> On Jul 19, 2018, at 9:29 AM, Gary Gregory < > garydgreg...@gmail.com> > >>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>> Annotation-based logging comes up once in a while here but we > have > >>> not > >>>>>>>>> implemented it. Project Lombok does that IIRC. > >>>>>>>> > >>>>>>>> Any reason for having not yet implemented it, or just the standard > >>>>>> “time”? > >>>>>>>> > >>>>>>> > >>>>>>> It's just more "stuff" and yes, time. And also, no one's wanted to > put > >>>>>> the > >>>>>>> time in. > >>>>>>> > >>>>>>> But then there are design issues and adding more "stuff" to the API > >>> jar. > >>>>>>> > >>>>>>> - Would you allow @Log(level=Level.TRACE) (should be the default?) > and > >>>>>>> @Log(level=Level.DEBUG) > >>>>>>> - What happens if you say both? > >>>>>>> - Should you be able to break it up and only say @LogEntry() or > >>>>>> @LogExit(). > >>>>>>> - What about @Log(file="${user.home}\foo.log") > >>>>>>> - and on and on ;-) > >>>>>> > >>>>>> Definitely fair points, I think I would try to go as simple as > possible > >>>>>> in a first pass…right? > >>>>>> > >>>>>> @Log > >>>>>> @Log(level=X) > >>>>>> > >>>>> > >>>>> Well, yes. But we need to think about the scope of the annotation. > The > >>>>> name @Log is as broad as you can think of making the name. So if we > >>> want to > >>>>> put more in there later, then we need to make sure that's the best > name. > >>>>> > >>>>> Do you think > >>>>> > >>>>> @Log() > >>>>> > >>>>> could be the default for (for example) > >>>>> > >>>>> @Log(level=Level.TRACE, entry=true, entryParameters=ALL, exit=true, > >>>>> exitValue=true) > >>>>> > >>>>> Where entryParameters (if on a method) would let me list which params > >>> for > >>>>> that methods to log) > >>>>> > >>>>> How do I avoid logging a password argument for example? Sounds like > we > >>> can > >>>>> do away with entryParameters if we have a @LogHide to annotate a > >>>>> parameter. > >>>>> > >>>>> I could see that as step one but we need to think about all that we > >>> would > >>>>> want to do to make sure @Log is the right name. What's a name that > says > >>> log > >>>>> all entries and exits? @LogEntryExit? > >>>>> > >>>>> Overall I would think that this kind of annotated class would change > >>> that > >>>>> class' byte codes after compilation so that there are no runtime > >>>>> requirements even for annotations. I certainly would not want to > leave > >>>>> behind clues like @LogHide to would be attackers.... > >>>>> > >>>>> Thoughts? > >>> > >>> I think that @Log is the wrong name because it’s quite vague. Maybe > >>> @LogMethodCalls, or as you suggest @LogEntryExit. > >>> > >>> I like the signature you suggested @Gary. > >>> > >>> @Matt - As for mechanics, I would think we would want to do compile > time > >>> byte code weaving. (Is there any appetite for using aspectJ? Feels > like a > >>> large ask to add a dependency to log4j2 though.) > >>> > >> > >> I've not lloked at AspectJ for a long time, not sure it requires a > runtime; > >> I think we want a compile time only dep, Apache Commson Weaver or Apache > >> Commons BCEL come to mind. > >> > >> Gary > >> > >> > >>> > >>>>> > >>>>> Gary > >>>>> > >>>>> > >>>>>> -Rob > >>>>>> > >>>>>>> > >>>>>>> Gary > >>>>>>> > >>>>>>> > >>>>>>>> > >>>>>>>>> > >>>>>>>>> Gary > >>>>>>>>> > >>>>>>>>> On Thu, Jul 19, 2018, 07:15 Rob Tompkins <chtom...@gmail.com > <mailto:chtom...@gmail.com>> > >>> wrote: > >>>>>>>>> > >>>>>>>>>> Hey folks, > >>>>>>>>>> > >>>>>>>>>> I’m curious if anyone has thought about adding a class level > @Log > >>>>>>>>>> annotation such that upon debug or trace configuration, method > >>> entry > >>>>>> and > >>>>>>>>>> exit gets automatically logged? > >>>>>>>>>> > >>>>>>>>>> -Rob > > > >