[
https://issues.apache.org/jira/browse/LOG4J2-3568?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17575940#comment-17575940
]
Ralph Goers commented on LOG4J2-3568:
-------------------------------------
I was going to say the same thing. The url path should be url encoded.
> ResolverUtil fails to extractPath for custom plugins in jar, if there are
> blanks in the path
> --------------------------------------------------------------------------------------------
>
> Key: LOG4J2-3568
> URL: https://issues.apache.org/jira/browse/LOG4J2-3568
> Project: Log4j 2
> Issue Type: Bug
> Components: Configuration
> Affects Versions: 2.17.2
> Environment: Windows 10
> Windows Server 2019
> Reporter: Sven Seelig
> Priority: Major
>
> We are using plugins in our config, e.g.:
> {noformat}
> "configuration": {
> "name": "MyAppLog4JConfig",
> "packages": "de.mycompany.myapp.adapter.log4j.plugin",
> "properties": {
> ...
> "appenders": {
> ...
> "MyAppConsole": {
> "name": "MyApp-Console-Appender",
> "PatternLayout": {
> "pattern": "${sysPatternlayout}",
> "charset": "UTF-8"
> }
> {noformat}
> Everything works fine until the installation path of our application contains
> one or more blanks, e.g. "C:\Program Files\MyApp_13.0.1".
>
> The plugin classes and the log4j2.json are delivered within jar files
> (different jar files, same folder). The config-file itself is found and read.
> We are accessing the context in a standard way:
>
> {code:java}
> LoggerContext log4j2LoggerContext =
> (org.apache.logging.log4j.core.LoggerContext)
> org.apache.logging.log4j.LogManager.getContext(true);
> {code}
>
> While trying to extract the path to our custom plugins, the PluginManager
> lands here:
> org.apache.logging.log4j.core.config.plugins.util.ResolverUtil#extractPath
> {code:java}
> String extractPath(final URL url) throws UnsupportedEncodingException,
> URISyntaxException {
> String urlPath = url.getPath(); // same as getFile but without the Query
> portion
> [...]
> // For jar: URLs, the path part starts with "file:"
> if (urlPath.startsWith("file:")) {
> urlPath = urlPath.substring(5);
> }
> // If it was in a JAR, grab the path to the jar
> final int bangIndex = urlPath.indexOf('!');
> if (bangIndex > 0) {
> urlPath = urlPath.substring(0, bangIndex);
> }
> [...]
> final String cleanPath = new URI(urlPath).getPath(); {code}
> Problem is, if the urlPath contains blank(s), the new URI(...) call will
> throw an URISyntaxException and the plugins are not loaded.
> Simple solution would be an additional check and replacement of the blanks
> with "%20".
> {code:java}
> if(urlPath.contains(" ")){
> urlPath = urlPath.replace(" ", "%20");
> }
> final String cleanPath = new URI(urlPath).getPath(); {code}
> or
> {code:java}
> final String cleanPath = new URI(urlPath.replace(" ", "%20")).getPath();
> {code}
> We built the current release-2,x from the repo
> ([https://gitbox.apache.org/repos/asf/logging-log4j2.git]), had the same
> issue as before (2.17.2) but with this check added it works.
> As we can't run the maven build with tests (there seems to be a proxy issue
> for the MongoDB Tests), we decided not to open a pull-request. Please let us
> know, if you prefer a pull-request or if you need further information.
> (i) We are using the log4j-bridge at the moment, maybe this issue only shows
> up when using this besides log4j2 core and api (i)
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)