Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
2.11.1
-
None
Description
I don't use any of the scripting features. Nevertheless, these are always initialized when Log4j2 is initialized (see AbstractConfiguration -> initialize method). Although the component seems to be optional (see below). Therefore I'd wish there was an option to disable this feature.
At the moment, the initialize method will always try to instantiate ScriptManager. As the ScriptEngineManager used inside is not available on Android (see issue LOG4J2-1920), this initialization is fault-tolerant using try-catch: If it's not available, just leave the member "scriptManager" null and avoid to use it later in the code (null checks). So Log4j2 seems to work without this as well. See the relevant initialization code snippet from AbstractConfiguration:
@Override public void initialize() { LOGGER.debug(Version.getProductString() + " initializing configuration {}", this); subst.setConfiguration(this); try { scriptManager = new ScriptManager(this, watchManager); } catch (final LinkageError | Exception e) { // LOG4J2-1920 ScriptEngineManager is not available in Android LOGGER.info("Cannot initialize scripting support because this JRE does not support it.", e); } // ...
I'd like to be able to use Log4j2 without having it initialize the ScriptManager mandatorily.
So it would be nice if I could enforce the scripting-less Android mode.
As I use programmatic configuration using the builder, a setter in the ConfigurationBuilder would be great! Example:
void setEnableScriptingManager( boolean enableScriptingManager );