You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Piotr Karwasz (Jira)" <ji...@apache.org> on 2022/03/06 16:57:00 UTC

[jira] [Created] (LOG4J2-3427) ServiceLoader usage in a servlet environment

Piotr Karwasz created LOG4J2-3427:
-------------------------------------

             Summary: ServiceLoader usage in a servlet environment
                 Key: LOG4J2-3427
                 URL: https://issues.apache.org/jira/browse/LOG4J2-3427
             Project: Log4j 2
          Issue Type: Improvement
            Reporter: Piotr Karwasz
            Assignee: Piotr Karwasz


It is fair to assume that a servlet container like Tomcat might contain multiple copies of Log4j 2.x:
 * a copy of Log4j 2.x can be used as logging provider for the entire server,
 * each web application can contain another copy of Log4j 2.x

One of the shortcomings of {{ServiceLoader}} is that it detects services in both the web application's and server's classloader, but only those in the web application are usable: those in the server's classloader can not extend the service class contained in the application's classloader.

A typical usage of {{ServiceLoader}} to find all instances of a certain service can therefore end up in a {{{}ServiceConfigurationError{}}}. Those are caught in Log4j 2.x, but usually end up in all services (also the viable ones) being {*}discarded{*}.

Hence a tool is necessary to only discard those services, which are contained in the server's classloader.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)