GitHub user henrik242 opened a pull request:
https://github.com/apache/logging-log4j2/pull/183
Avoid NullPointerException in PropertiesUtil.reload()
SystemPropertiesPropertySource.forEach(..) uses Property.getProperty(..)
to resolve values. If that value is a non-String, the value will be
null. Since `literal` is a ConcurrentHashMap, a put(..) with null value
will yield a NullPointerException.
This is especially hard to debug in the case of e.g. StatusLogger,
which initializes PropertiesUtil as a static variable. The class is
unable to load, throws a NoClassDefFoundError, and hides the
NullPointerException.
Here's what I got when I had a Property value that was a File:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class
org.apache.logging.log4j.util.PropertiesUtil
at
org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:78)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:60)
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/henrik242/logging-log4j2
skip-null-propery-value
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/logging-log4j2/pull/183.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #183
----
commit fef993fbb5cbeddfa1ac29a6a33d3dfe2e833053
Author: Henrik Brautaset Aronsen <henrik@...>
Date: 2018-06-22T12:45:26Z
Avoid NullPointerException in PropertiesUtil.reload()
SystemPropertiesPropertySource.forEach(..) uses Property.getProperty(..)
to resolve values. If that value is a non-String, the value will be
null. Since `literal` is a ConcurrentHashMap, a put(..) with null value
will yield a NullPointerException.
This is especially hard to debug in the case of e.g. StatusLogger,
which initializes PropertiesUtil as a static variable. The class is
unable to load, throws a NoClassDefFoundError, and hides the
NullPointerException.
Here's what I got when I had a Property value that was a File:
Caused by: java.lang.NoClassDefFoundError: Could not initialize class
org.apache.logging.log4j.util.PropertiesUtil
at
org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:78)
at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:60)
----
---