Rob Spoor created LOG4J2-3640:
---------------------------------
Summary: @Plugin not compatible between 2.x and 3.x
Key: LOG4J2-3640
URL: https://issues.apache.org/jira/browse/LOG4J2-3640
Project: Log4j 2
Issue Type: Bug
Components: Plugins
Affects Versions: 3.0.0
Reporter: Rob Spoor
I had an issue with resolving Log4j2 2.19.0 as a module. While I resolved the
issue by adding an explicit {{--add-opens}} clause, I still found something
that appears to be an issue.
According to [this
comment|https://stackoverflow.com/questions/74592131/maven-log4j-class-not-found#comment131670094_74592131],
{quote}Plugins should NOT need to be recompiled
{quote}
Because of an earlier comment on my question I had tried to use version
3.0.0-SNAPSHOT. That produced some compiler errors. While some were easy enough
to solve to be compatible with versions 2.19.0 and 3.0.0-SNAPSHOT, the moved
{{@Plugin}} annotation meant I couldn't compile my project for both versions
2.19.0 and 3.0.0-SNAPSHOT. That made me believe that plugins written for 2.19.0
are *not* compatible with 3.0.0.
I have created a little POC: [https://github.com/robtimus/log4j-compat-test].
This consists of 3 Maven modules:
* A module with only a simple plugin
* A module to test this plugin in Log4j2 2.19.0
* A module to test this plugin in Log4j2 3.0.0-SNAPSHOT
The entire project can be tested using {{mvn test}}. Right now this fails
because, as expected, the moving of the {{@Plugin}} annotation caused the
plugin to *not* be resolved.
I've also included a "legacy" plugin class in the 3.0.0-SNAPSHOT test module
that shows that the deprecated annotations
{{org.apache.logging.log4j.core.config.plugins.PluginAttribute}} and
{{org.apache.logging.log4j.core.config.plugins.PluginFactory}} still work; it's
the (forced) replacement of
{{org.apache.logging.log4j.core.config.plugins.Plugin}} with both
{{org.apache.logging.log4j.plugins.Plugin}} and
{{org.apache.logging.log4j.plugins.Configurable}} that causes the plugin
written for version 2.19.0 to not work.
----
I think that the following should be done, to prevent forcing people rewrite
all of their existing plugins:
* Re-adding the {{org.apache.logging.log4j.core.config.plugins.Plugin}}
annotation, but make it deprecated.
* The plugin registration code should treat this plugin as a combination of
{{org.apache.logging.log4j.plugins.Plugin}} and
{{{}org.apache.logging.log4j.plugins.Configurable{}}}. There may be another
one, for the {{category}} attribute of the old annotation, but I couldn't find
out which one yet.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)