[ 
https://issues.apache.org/jira/browse/LOG4J2-1421?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16086785#comment-16086785
 ] 

Paul Burrowes edited comment on LOG4J2-1421 at 7/14/17 9:16 AM:
----------------------------------------------------------------

I have run into this too. The problem is in how {{URLClassPath.findResource()}} 
works (called by {{ResolverUtil}} via 
{{URLClassLoader.getResources(packageName)}}).

Because a Jar file (any zip file) does not need to contain a directory 
structure the package directory is not necessarily available as a resource. The 
jar attached by Anthony Maire illustrates this, containing two files but no 
directories. {{URLClassPath.findResource("test")}} returns null for this jar. 
This can be worked around by parsing the manifest of the jars referenced by the 
classloader and/or falling back to reading the jar index.

{code}
 unzip -l log4j-plugin-load-issue/defaultFilter.jar
Archive:  log4j-plugin-load-issue/defaultFilter.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
       25  06-09-2016 19:38   META-INF/MANIFEST.MF
     1012  06-09-2016 19:33   test/DefaultFilter.class
---------                     -------
     1037                     2 files
{code}

Some tools surprisingly hard to create a jar that doesn't have this problem 
unless you're building modules with Maven compatible structures.


was (Author: pburrowesoc):
I have run into this too. The problem is in how {{URLClassPath.findResource()}} 
works (called by {{ResolverUtil}} via 
{{URLClassLoader.getResources(packageName)}}).

Because a Jar file (any zip file) does not need to contain a directory 
structure the package directory is not necessarily available as a resource. The 
jar attached by Anthony Maire illustrates this, containing two files but no 
directories. {{URLClassPath.findResource("test")}} returns null for this jar. 
This can be worked around by parsing the manifest of the jars referenced by the 
classloader and/or falling back to reading the jar index.

{code}
 unzip -l log4j-plugin-load-issue/defaultFilter.jar
Archive:  log4j-plugin-load-issue/defaultFilter.jar
  Length      Date    Time    Name
---------  ---------- -----   ----
       25  06-09-2016 19:38   META-INF/MANIFEST.MF
     1012  06-09-2016 19:33   test/DefaultFilter.class
---------                     -------
     1037                     2 files
{code}

It's surprisingly hard to create a jar that doesn't have this problem unless 
you're building modules with Maven compatible structures. Ant's jar task, for 
example, doesn't include directories if you pass it a fileset.

> Custom plugins packaged in jar files are not loaded by "packages" property 
> mecanism
> -----------------------------------------------------------------------------------
>
>                 Key: LOG4J2-1421
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-1421
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Plugins
>    Affects Versions: 2.6
>            Reporter: Anthony Maire
>         Attachments: log4j-plugin-load-issue.zip
>
>
> the "packages" attribute in configuration file works properly to load custom 
> plugins from Eclipse. However, if the plugin class is packaged alone in a jar 
> file (without the Log4j2Plugins.dat file in it), the "packages" property load 
> mecanism is not working.
> 2016-06-09 19:40:44,823 main DEBUG Took 0,001222 seconds to load 0 plugins 
> from package test



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to