You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@logging.apache.org by "Paul Burrowes (JIRA)" <ji...@apache.org> on 2017/07/14 09:17:00 UTC
[jira] [Comment Edited] (LOG4J2-1421) Custom plugins packaged in
jar files are not loaded by "packages" property mecanism
[ 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 make it 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}
Some tools surprisingly hard to create a jar that doesn't have this problem unless you're building modules with Maven compatible structures.
> 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)