Might I ask why? lots of people use it and adding the ability to enhance the 
logging just by adding a dependency seems like a win to me.

Ralph

> On Jul 10, 2022, at 2:27 PM, Volkan Yazıcı <vol...@yazi.ci> wrote:
> 
> -1 from me for a Log4j functionality depending on Lombok.
> 
>> On Sun, Jul 10, 2022 at 11:17 PM Ralph Goers <ralph.go...@dslextreme.com>
>> wrote:
>> 
>> https://www.baeldung.com/lombok-custom-annotation seems to imply that we
>> could
>> add this support by extending Lombok.
>> 
>> Ralph
>> 
>>> On Jul 10, 2022, at 1:58 PM, Ralph Goers <ralph.go...@dslextreme.com>
>> wrote:
>>> 
>>> Because I don’t see how it can work.
>>> 
>>> A ThreadLocal is a run time construct. If you are saving location
>> information in
>>> a ThreadLocal then it is only good for the life of the request and/or
>> thread. But
>>> the location information will never change. It is fixed even before the
>> Class is loaded.
>>> So I simply don’t see the point of using a ThreadLocal.
>>> 
>>> Furthermore, I am ONLY interested in injecting location information at
>> compile
>>> time. That means there will always be zero run time cost. Using an agent
>> or some
>>> other technique requires modifying the class as it is loaded or other
>> runtime
>>> manipulations.
>>> 
>>> I’ve looked at the HandleLog method in Lombok. It actually isn’t very
>> complicated.
>>> It uses JCTree and the util package from javac and adds the logger field
>> directly
>>> to the class the compiler is constructing. From what I can tell it
>> should also be
>>> possible to scan the source and modify the appropriate lines in the same
>> way,
>>> but it would require a POC.
>>> 
>>> Ralph
>>> 
>>>> On Jul 10, 2022, at 1:09 PM, Volkan Yazıcı <vol...@yazi.ci> wrote:
>>>> 
>>>> Why do you prefer `withLocation()` compared to the thread-local
>> approach?
>>>> 
>>>> On Sun, Jul 10, 2022 at 9:55 PM Ralph Goers <ralph.go...@dslextreme.com
>>> 
>>>> wrote:
>>>> 
>>>>> This is exactly why I believe we should only support LogBuilder as it
>>>>> already
>>>>> has withLocation(). I see no point in adding the parameter to all the
>>>>> non-fluent
>>>>> variations.
>>>>> 
>>>>> To work, the location must be passed as a parameter on the logging API
>>>>> call.
>>>>> Thus it won’t work for Log4j 1 or SLF4J.
>>>>> 
>>>>> Ralph
>>>>> 
>>>>>> On Jul 10, 2022, at 12:47 PM, Volkan Yazıcı <vol...@yazi.ci> wrote:
>>>>>> 
>>>>>> Indeed supporting both static and dynamic weaving seems like the ideal
>>>>>> approach. (SPI-Fly is an interesting one. My OSGi illiteracy blocked
>> me
>>>>>> from wrapping my mind around all of its details. Nevertheless, I
>> think I
>>>>>> get the gist of it.) For both functionalities, we need to receive a
>>>>> package
>>>>>> list to scan for, right?
>>>>>> 
>>>>>> Translating logger calls to the ones that receive the source location
>>>>>> information as arguments is also a valid direction. Though note that
>> this
>>>>>> requires doubling the size of the API surface, AFAIC. That is, for
>> every
>>>>>> `info(String)`, we need to introduce `info(String, SourceLocation)`,
>> etc.
>>>>>> Hence, I am inclined to go this route unless I am missing something.
>>>>>> 
>>>>>> Piotr, what is your take on my claim that this optimization won't work
>>>>> for
>>>>>> bridges (SLF4J, log4j-1.2-api, etc.)?
>>>>>> 
>>>>>> On Sat, Jul 9, 2022 at 5:02 PM Piotr P. Karwasz <
>> piotr.karw...@gmail.com
>>>>>> 
>>>>>> wrote:
>>>>>> 
>>>>>>> Hi Volkan,
>>>>>>> 
>>>>>>> On Sat, 9 Jul 2022 at 12:05, Volkan Yazıcı <vol...@yazi.ci> wrote:
>>>>>>>> I think we can extend this experiment to implement zero-cost source
>>>>>>>> location capture for Log4j. Though I will appreciate your help on
>> some
>>>>>>>> loose ends. Assuming we have a bullet-proof mechanism to inline
>> source
>>>>>>>> location capture given a class, what is the right way to ship this?
>> As
>>>>> a
>>>>>>>> Maven plugin that kicks in at compile time? Wouldn't that make this
>>>>>>> feature
>>>>>>>> impossible to use without recompiling user sources? As a runtime
>>>>> utility?
>>>>>>>> If so, what about the cost of classpath scanning & weaving? If the
>>>>>>> bytecode
>>>>>>>> weaving only intercepts at Log4j API calls, this won't work for
>> Log4j 1
>>>>>>>> bridge, SLF4J, or any other indirect access to the Log4j API. What
>> do
>>>>> you
>>>>>>>> think? I have used a thread-local to pass the source location to the
>>>>>>>> caller, is there a better alternative? (Putting aside the
>>>>> dynamic-scoped
>>>>>>>> variables to be shipped with Loom.)
>>>>>>> 
>>>>>>> Great idea. I think that we can provide both a static and dynamic
>>>>>>> weaver from the same code (cf. SPI-Fly:
>>>>>>> https://github.com/apache/aries/tree/trunk/spi-fly). Developers
>> would
>>>>>>> be advised to statically weave their artifacts, while system
>>>>>>> administrators could do it during runtime.
>>>>>>> 
>>>>>>> The usage of a `ThreadLocal` seems Ok to me. Alternatively we could
>>>>>>> add some parameters to the `Logger.log` calls, but this would mean 4
>>>>>>> additional parameters on each simple call and we'll end up using the
>>>>>>> `Logger.log` method with an Object array.
>>>>>>> 
>>>>>>> Piotr
>>>>>>> 
>>>>> 
>>>>> 
>>> 
>> 
>> 

Reply via email to