> On Jul 19, 2018, at 2:35 PM, Ralph Goers <[email protected]> wrote:
>
> It has been brought up before. You can read about the JSR process at
> http://jcp.org <http://jcp.org/>.
Seems like we’d want to make this a collaborative effort, particularly because
they look for a collection of experts. I’ll see if I can come up with a draft
that we could go over here.
-Rob
>
> Ralph
>
>> On Jul 19, 2018, at 11:19 AM, Rob Tompkins <[email protected]> wrote:
>>
>> That doesn’t seem like a bad idea at all. Have you done that before or are
>> you at least familiar with the process so that I could begin working on that?
>>
>> -Rob
>>
>>> On Jul 19, 2018, at 2:04 PM, Ralph Goers <[email protected]> wrote:
>>>
>>> We should really propose a new Logging JSR. I would make sure it includes
>>> the ability for the compiler to provide the class name, method name and
>>> line number as “special” variables.
>>>
>>> Ralph
>>>
>>>> On Jul 19, 2018, at 10:53 AM, Gary Gregory <[email protected]> wrote:
>>>>
>>>> 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 <[email protected]> wrote:
>>>>
>>>>>
>>>>>
>>>>>> On Jul 19, 2018, at 1:41 PM, Ralph Goers <[email protected]>
>>>>> 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 <[email protected]>
>>>>> wrote:
>>>>>>>
>>>>>>> eOn Thu, Jul 19, 2018 at 10:19 AM Rob Tompkins <[email protected]
>>>>> <mailto:[email protected]>> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> On Jul 19, 2018, at 11:48 AM, Gary Gregory <[email protected]>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> FTR: https://projectlombok.org/features/log
>>>>>>>>>
>>>>>>>>> On Thu, Jul 19, 2018 at 8:48 AM Gary Gregory <[email protected]>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Jul 19, 2018 at 8:26 AM Rob Tompkins <[email protected]>
>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>> On Jul 19, 2018, at 10:17 AM, Gary Gregory <[email protected]
>>>>>>
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Jul 19, 2018 at 8:07 AM Rob Tompkins <[email protected]>
>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Jul 19, 2018, at 9:29 AM, Gary Gregory <
>>>>> [email protected]>
>>>>>>>>>>>>> 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 <[email protected]
>>>>> <mailto:[email protected]>>
>>>>>>>> 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
>>>>>>
>>>>>
>>>>>
>>>
>>>
>>
>>
>