Hi Ralph

I would like to try to implement something if I knew how to solve the following 
problem. In logger we have
only String someClassStr (fqdn). In order to add to MDC some information about 
module/layer I need to
get Class someClass, as I know only one way to get information for this class - 
someClass.getModule()[.getLayer()]. When I have only someClassStr I don't know 
how I get information
about module and layer.


>Среда,  3 октября 2018, 19:26 +03:00 от Ralph Goers <rgo...@apache.org>:
>
>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_satu...@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 < fo...@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_satu...@mail.ru >
>>>> À: "jigsaw-dev" <  jigsaw-dev@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
>
>


-- 
Alex Sviridov

Reply via email to