You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Matt Sicker (Jira)" <ji...@apache.org> on 2020/03/07 17:21:00 UTC

[jira] [Work started] (LOG4J2-2803) Create standardized scopes and dependency injection API

     [ https://issues.apache.org/jira/browse/LOG4J2-2803?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Work on LOG4J2-2803 started by Matt Sicker.
-------------------------------------------
> Create standardized scopes and dependency injection API
> -------------------------------------------------------
>
>                 Key: LOG4J2-2803
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2803
>             Project: Log4j 2
>          Issue Type: Epic
>          Components: Configuration, Core, Plugins
>            Reporter: Matt Sicker
>            Assignee: Matt Sicker
>            Priority: Major
>             Fix For: 3.0.0
>
>
> In Log4j 2.x, the plugin API provides several {{@Plugin}} annotations which are used for performing dependency injection of configuration-scoped data (plugin attributes, values) and other configuration-scoped plugins (plugin elements). While this API works well enough for a large majority of our use cases, the remaining injection points include the {{Node}} and {{Configuration}} corresponding to the currently parsed node and configuration respectively which are used to perform manual lookups and other glue code that would be more appropriately modeled through inversion of control with a more complete dependency injection API.
> In Log4j 3.0, this epic introduces a new plugin system API inspired by [CDI|https://docs.jboss.org/cdi/api/2.0/], [@Inject|https://docs.oracle.com/javaee/6/api/javax/inject/Inject.html], and [Guice|https://github.com/google/guice] that maintains full backward compatibility with the annotations from 2.x so that plugins do not need to be needlessly rewritten for 3.x. This epic was initially developed as a result of work done in LOG4J2-2694.
> Beyond the dependency injection API itself, this epic is motivated by the following goals:
>  * Simplify plugin classes that currently require manual method calls to {{Configuration}} or {{Node}}.
>  * Unify the various ad hoc dependency injection for configuration-scoped or singleton-scoped classes (the latter which are overridden via system properties) including:
>  ** {{StrSubstitutor}}
>  ** {{ConfigurationScheduler}} (or scheduled tasks in general)
>  ** {{ScriptManager}}
>  ** {{WatchManager}}
>  ** {{NanoClock}}
>  ** {{ShutdownCallbackRegistry}}
>  ** {{Clock}}
>  ** {{ContextSelector}}
>  ** {{ConfigurationFactory}}{{}}
>  ** {{LogEventFactory}}
>  ** {{ContextDataFactory}}
>  * Make dependencies between classes more explicit via inversion of control which allows for easier testing and modularity.
>  * Avoid the use of manual configuration handling at the API level of any plugins including basic string parsing (as currently supported through the {{TypeConverter}} API), class loading from strings, and ad hoc reflection. This relates to the changes made in LOG4J2-2621 and LOG4J2-1917.
>  * Provide smart initialization logic to continue (or maintain) improvements to startup time and avoid loading plugins that aren't referenced in the loaded configuration.
>  * Provide scopes for other ad hoc scopes/contexts used in various plugins such as HTTP request, HTTP session, servlet context, etc.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)