Separate logging for JPMS module/layer

forax at univ-mlv.fr forax at univ-mlv.fr
Thu Oct 4 17:26:37 UTC 2018


I was thinking about capturing the call stack when you create the logger (to get the module), not when you call the logger.

cheers,
Rémi

----- Mail original -----
> De: "Ralph Goers" <ralph.goers at dslextreme.com>
> À: "Alex Sviridov" <ooo_saturn7 at mail.ru>
> Cc: "Remi Forax" <forax at univ-mlv.fr>, "jigsaw-dev" <jigsaw-dev at openjdk.java.net>
> Envoyé: Mercredi 3 Octobre 2018 05:08:27
> Objet: Re: Separate logging for JPMS module/layer

> Log4j handles this by capturing the fully qualified class name of the logging
> adapter. Obviously, this doesn’t work if the adapter doesn’t pass Log4j the
> FQCN, but it does work for the adapters we support.  That said, it is very slow
> to capture this and is probably the biggest pain point. Log4j recommends not
> capturing this information in production environments because it is so slow.
> Unfortunately, it seems to have gotten even slower in Java 9+. In an ideal
> world we would be able to capture the caller information at compile time but
> Java provides no good way to do this. Wouldn’t it be great if I could just code
> something like logger.error(_CallerInfo_, “hello”) and the compiler would
> provide the caller info data structure that was generated by the compiler?
> 
> FWIW, I do plan to add the module information to the caller information provided
> with Log4j but just haven’t gotten to it. You are more than welcome to provide
> a patch.
> 
> Ralph
> 
>> On Oct 2, 2018, at 3:20 PM, Alex Sviridov <ooo_saturn7 at mail.ru> wrote:
>> 
>> Thank you for you suggestion. But can this be used when some library
>> uses one logging system and for another uses some bridge. Because of this
>> bridging
>> LoggerFactory.getLogger is called somewhere in bridge, as I understand,
>> 
>> 
>>> Среда,  3 октября 2018, 1:12 +03:00 от Remi Forax <forax at univ-mlv.fr>:
>>> 
>>> You can use the StackWalker
>>> https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/StackWalker.html
>>> 
>>> regards,
>>> Rémi
>>> 
>>> ----- Mail original -----
>>>> De: "Alex Sviridov" < ooo_saturn7 at mail.ru >
>>>> À: "jigsaw-dev" < jigsaw-dev at openjdk.java.net >
>>>> Envoyé: Mardi 2 Octobre 2018 23:54:48
>>>> Objet: Separate logging for JPMS module/layer
>>> 
>>>> Hi all,
>>>> 
>>>> Could anyone say how the following problem can be solved. I want to create
>>>> separate
>>>> log file for every JPMS module/layer. The problem is that many
>>>> libraries/programs
>>>> use LoggerFactory.getLogger(String className) so in getLogger I have only
>>>> the name of the class as String, so I can't get module and layer.
>>>> 
>>>> If I had not String className, but Class klass then the problem would be easily
>>>> solved.
>>>> As I understand I can't load class by name because it would require all modules
>>>> export
>>>> their packages to logging framework that has no sense.
>>>> 
>>>> Are there any solutions for such problem?
>>>> 
>>>> 
>>>> --
>>>> Alex Sviridov
>> 
>> 
>> --
> > Alex Sviridov


More information about the jigsaw-dev mailing list