-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