You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by pk...@apache.org on 2023/07/10 21:23:59 UTC
[logging-log4j2] 01/04: Avoid Locale-dependent lowercase/uppercase string conversion
This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 0e5fe23848e22dfa2451d528d9f1bdac34aa8007
Author: Ammar Y. Awad <am...@ejad.com.eg>
AuthorDate: Fri May 19 19:52:49 2023 +0300
Avoid Locale-dependent lowercase/uppercase string conversion
String#toLowerCase and String#toUpperCase are locale-dependent. These calls are replaced with Strings#toRootLowerCase and Strings#toRootUpperCase.
---
log4j-1.2-api/src/main/java/org/apache/log4j/Level.java | 5 +++--
.../src/main/java/org/apache/log4j/builders/BuilderManager.java | 5 +++--
.../src/main/java/org/apache/log4j/helpers/DateLayout.java | 4 +++-
.../src/main/java/org/apache/log4j/helpers/OptionConverter.java | 8 +++++---
.../src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java | 4 +++-
.../main/java/org/apache/log4j/layout/Log4j1SyslogLayout.java | 4 +++-
log4j-1.2-api/src/test/java/org/apache/log4j/xml/XLevel.java | 4 +++-
.../main/java/org/apache/logging/log4j/util/PropertySource.java | 1 +
.../log4j/core/appender/rolling/RollingAppenderSizeTest.java | 3 ++-
.../rolling/RollingAppenderTempCompressedFilePatternTest.java | 3 ++-
.../org/apache/logging/log4j/core/config/TestConfigurator.java | 3 ++-
.../org/apache/logging/log4j/core/appender/db/ColumnMapping.java | 5 +++--
.../core/appender/rewrite/LoggerNameLevelRewritePolicy.java | 5 +++--
.../logging/log4j/core/appender/routing/IdlePurgePolicy.java | 4 +++-
.../log4j/core/config/composite/CompositeConfiguration.java | 4 +++-
.../log4j/core/config/composite/DefaultMergeStrategy.java | 9 ++++++---
.../log4j/core/config/plugins/convert/CoreTypeConverters.java | 4 +++-
.../java/org/apache/logging/log4j/core/lookup/Interpolator.java | 5 +++--
.../java/org/apache/logging/log4j/core/lookup/LowerLookup.java | 4 +++-
.../java/org/apache/logging/log4j/core/lookup/UpperLookup.java | 4 +++-
.../org/apache/logging/log4j/core/net/UrlConnectionFactory.java | 7 ++++---
.../logging/log4j/core/pattern/MessagePatternConverter.java | 5 +++--
.../java/org/apache/logging/log4j/core/script/ScriptManager.java | 1 +
.../logging/log4j/core/time/internal/format/FastDateParser.java | 4 +++-
.../org/apache/logging/log4j/core/tools/picocli/CommandLine.java | 3 ++-
.../java/org/apache/logging/log4j/couchdb/CouchDbProvider.java | 4 +++-
.../test/java/org/apache/logging/dumbster/smtp/SmtpRequest.java | 4 +++-
.../apache/logging/log4j/web/Log4jServletContextListener.java | 5 +++--
.../log4j/web/Log4jShutdownOnContextDestroyedListener.java | 5 +++--
.../org/apache/logging/log4j/layout/template/json/util/Uris.java | 4 +++-
.../java/org/apache/logging/log4j/spring/boot/SpringLookup.java | 4 +++-
.../java/org/apache/logging/log4j/taglib/TagUtilsLevelTest.java | 3 ++-
.../apache/logging/log4j/web/Log4jServletContextListener.java | 5 +++--
.../log4j/web/Log4jShutdownOnContextDestroyedListener.java | 5 +++--
34 files changed, 99 insertions(+), 48 deletions(-)
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/Level.java b/log4j-1.2-api/src/main/java/org/apache/log4j/Level.java
index 19c5e2644f..0e0247e154 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/Level.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/Level.java
@@ -21,11 +21,12 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamException;
import java.io.Serializable;
-import java.util.Locale;
import org.apache.log4j.helpers.OptionConverter;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* Defines the minimum set of levels recognized by the system, that is
* <code>OFF</code>, <code>FATAL</code>, <code>ERROR</code>,
@@ -181,7 +182,7 @@ public class Level extends Priority implements Serializable {
if (sArg == null) {
return defaultLevel;
}
- final String s = sArg.toUpperCase(Locale.ROOT);
+ final String s = toRootUpperCase(sArg);
switch (s) {
case "ALL":
return Level.ALL;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java
index 864e5ff27e..9e08423bb8 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/builders/BuilderManager.java
@@ -16,7 +16,6 @@
*/
package org.apache.log4j.builders;
-import java.util.Locale;
import java.util.Objects;
import java.util.Properties;
import java.util.function.Function;
@@ -45,6 +44,8 @@ import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Cast;
import org.w3c.dom.Element;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
*
*/
@@ -95,7 +96,7 @@ public class BuilderManager {
private <T> PluginType<T> getPlugin(final String className) {
Objects.requireNonNull(plugins, "plugins");
Objects.requireNonNull(className, "className");
- final String key = className.toLowerCase(Locale.ROOT).trim();
+ final String key = toRootLowerCase(className).trim();
final PluginType<?> pluginType = plugins.get(key);
if (pluginType == null) {
LOGGER.warn("Unable to load plugin class name {} with key {}", className, key);
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/DateLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/DateLayout.java
index 64110aaf5d..98a657a126 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/DateLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/DateLayout.java
@@ -25,6 +25,8 @@ import java.util.TimeZone;
import org.apache.log4j.Layout;
import org.apache.log4j.spi.LoggingEvent;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* This abstract layout takes care of all the date related options and formatting work.
*/
@@ -156,7 +158,7 @@ abstract public class DateLayout extends Layout {
@Deprecated
public void setOption(final String option, final String value) {
if (option.equalsIgnoreCase(DATE_FORMAT_OPTION)) {
- dateFormatOption = value.toUpperCase();
+ dateFormatOption = toRootUpperCase(value);
} else if (option.equalsIgnoreCase(TIMEZONE_OPTION)) {
timeZoneID = value;
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java
index 1e9033d811..061a7770b0 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/OptionConverter.java
@@ -37,6 +37,8 @@ import org.apache.logging.log4j.util.LoaderUtil;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* A convenience class to convert property values to specific types.
*/
@@ -158,7 +160,7 @@ public final class OptionConverter {
}
public static org.apache.logging.log4j.Level createLevel(final Priority level) {
- final String name = level.toString().toUpperCase() + "#" + level.getClass().getName();
+ final String name = toRootUpperCase(level.toString()) + "#" + level.getClass().getName();
return org.apache.logging.log4j.Level.forName(name, toLog4j2Level(level.toInt()));
}
@@ -493,7 +495,7 @@ public final class OptionConverter {
return defaultValue;
}
- String s = value.trim().toUpperCase();
+ String s = toRootUpperCase(value.trim());
long multiplier = 1;
int index;
@@ -627,7 +629,7 @@ public final class OptionConverter {
// Support for levels defined in Log4j2.
if (LOG4J2_LEVEL_CLASS.equals(clazz)) {
- final org.apache.logging.log4j.Level v2Level = org.apache.logging.log4j.Level.getLevel(levelName.toUpperCase());
+ final org.apache.logging.log4j.Level v2Level = org.apache.logging.log4j.Level.getLevel(toRootUpperCase(levelName));
if (v2Level != null) {
return new LevelWrapper(v2Level);
}
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
index c17968bb4c..d78de72e0f 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/UtilLoggingLevel.java
@@ -21,6 +21,8 @@ import java.util.List;
import org.apache.log4j.Level;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* An extension of the Level class that provides support for java.util.logging Levels.
*/
@@ -199,7 +201,7 @@ public class UtilLoggingLevel extends Level {
return defaultLevel;
}
- final String s = sArg.toUpperCase();
+ final String s = toRootUpperCase(sArg);
if (s.equals("SEVERE")) {
return SEVERE;
diff --git a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1SyslogLayout.java b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1SyslogLayout.java
index b9d1213cd2..c167442aee 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1SyslogLayout.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/layout/Log4j1SyslogLayout.java
@@ -37,6 +37,8 @@ import org.apache.logging.log4j.plugins.PluginBuilderAttribute;
import org.apache.logging.log4j.plugins.PluginElement;
import org.apache.logging.log4j.util.Chars;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
* Port of the layout used by SyslogAppender in Log4j 1.x. Provided for
* compatibility with existing Log4j 1 configurations.
@@ -186,7 +188,7 @@ public final class Log4j1SyslogLayout extends AbstractStringLayout {
}
if (facilityPrinting) {
- buf.append(facility != null ? facility.name().toLowerCase() : "user").append(':');
+ buf.append(facility != null ? toRootLowerCase(facility.name()) : "user").append(':');
}
buf.append(message);
diff --git a/log4j-1.2-api/src/test/java/org/apache/log4j/xml/XLevel.java b/log4j-1.2-api/src/test/java/org/apache/log4j/xml/XLevel.java
index bfc729e5c1..ff49380572 100644
--- a/log4j-1.2-api/src/test/java/org/apache/log4j/xml/XLevel.java
+++ b/log4j-1.2-api/src/test/java/org/apache/log4j/xml/XLevel.java
@@ -18,6 +18,8 @@ package org.apache.log4j.xml;
import org.apache.log4j.Level;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* This class introduces a new level called TRACE. TRACE has lower level than DEBUG.
*/
@@ -55,7 +57,7 @@ public class XLevel extends Level {
if (sArg == null) {
return defaultValue;
}
- final String stringVal = sArg.toUpperCase();
+ final String stringVal = toRootUpperCase(sArg);
if (stringVal.equals(TRACE_STR)) {
return XLevel.TRACE;
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertySource.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertySource.java
index fb65942745..29160bafba 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertySource.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/PropertySource.java
@@ -30,6 +30,7 @@ import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
+
/**
* A source for global configuration properties.
*
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
index 595d6de32f..80f904664e 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderSizeTest.java
@@ -46,6 +46,7 @@ import org.junit.runners.Parameterized;
import static org.apache.logging.log4j.core.test.hamcrest.Descriptors.that;
import static org.apache.logging.log4j.core.test.hamcrest.FileMatchers.hasName;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
import static org.hamcrest.Matchers.endsWith;
import static org.hamcrest.Matchers.hasItemInArray;
import static org.junit.Assert.*;
@@ -147,7 +148,7 @@ public class RollingAppenderSizeTest {
CompressorInputStream in = null;
try (final FileInputStream fis = new FileInputStream(file)) {
try {
- in = new CompressorStreamFactory().createCompressorInputStream(ext.name().toLowerCase(), fis);
+ in = new CompressorStreamFactory().createCompressorInputStream(toRootLowerCase(ext.name()), fis);
} catch (final CompressorException ce) {
ce.printStackTrace();
fail("Error creating input stream from " + file.toString() + ": " + ce.getMessage());
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
index 8fee8bac61..53a7f4043d 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/appender/rolling/RollingAppenderTempCompressedFilePatternTest.java
@@ -44,6 +44,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledOnOs;
import org.junit.jupiter.api.condition.OS;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
import static org.junit.jupiter.api.Assertions.*;
/**
@@ -91,7 +92,7 @@ public class RollingAppenderTempCompressedFilePatternTest {
if (ext != null) {
gzippedFiles++;
try {
- in = new CompressorStreamFactory().createCompressorInputStream(ext.name().toLowerCase(),
+ in = new CompressorStreamFactory().createCompressorInputStream(toRootLowerCase(ext.name()),
fis);
} catch (final CompressorException ce) {
ce.printStackTrace();
diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
index 1fe1ebfaab..591097dae6 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/config/TestConfigurator.java
@@ -48,6 +48,7 @@ import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import static org.apache.logging.log4j.core.test.hamcrest.MapMatchers.hasSize;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThan;
@@ -393,7 +394,7 @@ public class TestConfigurator {
for (final String element : CHARS) {
dir.append(element);
- dir.append(element.toUpperCase());
+ dir.append(toRootUpperCase(element));
}
final String value = FILESEP.equals("/") ? dir.toString() + "/test.log" : "1:/target/bad:file.log";
System.setProperty("testfile", value);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java
index 69e845028f..24d201c052 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/db/ColumnMapping.java
@@ -17,7 +17,6 @@
package org.apache.logging.log4j.core.appender.db;
import java.util.Date;
-import java.util.Locale;
import java.util.function.Supplier;
import org.apache.logging.log4j.Logger;
@@ -39,6 +38,8 @@ import org.apache.logging.log4j.spi.ThreadContextStack;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.ReadOnlyStringMap;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* A configuration element for specifying a database column name mapping.
*
@@ -209,7 +210,7 @@ public final class ColumnMapping {
}
public static String toKey(final String name) {
- return name.toUpperCase(Locale.ROOT);
+ return toRootUpperCase(name);
}
private final StringLayout layout;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java
index f179322b53..773fe3a42e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/LoggerNameLevelRewritePolicy.java
@@ -17,7 +17,6 @@
package org.apache.logging.log4j.core.appender.rewrite;
import java.util.HashMap;
-import java.util.Locale;
import java.util.Map;
import org.apache.logging.log4j.Level;
@@ -30,6 +29,8 @@ import org.apache.logging.log4j.plugins.PluginAttribute;
import org.apache.logging.log4j.plugins.PluginElement;
import org.apache.logging.log4j.plugins.PluginFactory;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* Rewrites log event levels for a given logger name.
*
@@ -63,7 +64,7 @@ public final class LoggerNameLevelRewritePolicy implements RewritePolicy {
}
private static Level getLevel(final String name) {
- return Level.getLevel(name.toUpperCase(Locale.ROOT));
+ return Level.getLevel(toRootUpperCase(name));
}
private final String loggerName;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
index f4e568a2b6..113ea1d23f 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/routing/IdlePurgePolicy.java
@@ -33,6 +33,8 @@ import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.plugins.PluginAttribute;
import org.apache.logging.log4j.plugins.PluginFactory;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* Policy is purging appenders that were not in use specified time in minutes
*/
@@ -145,7 +147,7 @@ public class IdlePurgePolicy extends AbstractLifeCycle implements PurgePolicy, R
units = TimeUnit.MINUTES;
} else {
try {
- units = TimeUnit.valueOf(timeUnit.toUpperCase());
+ units = TimeUnit.valueOf(toRootUpperCase(timeUnit));
} catch (final Exception ex) {
LOGGER.error("Invalid timeUnit value {}. timeUnit set to MINUTES", timeUnit, ex);
units = TimeUnit.MINUTES;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java
index 892247a052..d48be3d8db 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/CompositeConfiguration.java
@@ -34,6 +34,8 @@ import org.apache.logging.log4j.core.util.Watcher;
import org.apache.logging.log4j.plugins.Node;
import org.apache.logging.log4j.plugins.util.ResolverUtil;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* A Composite Configuration.
*/
@@ -64,7 +66,7 @@ public class CompositeConfiguration extends AbstractConfiguration implements Rec
final String key = entry.getKey();
final String value = getConfigurationStrSubstitutor().replace(entry.getValue());
if ("status".equalsIgnoreCase(key)) {
- statusConfig.setStatus(value.toUpperCase());
+ statusConfig.setStatus(toRootUpperCase(value));
} else if ("dest".equalsIgnoreCase(key)) {
statusConfig.setDestination(value);
} else if ("shutdownHook".equalsIgnoreCase(key)) {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
index bcdff6d537..00281cdd96 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/composite/DefaultMergeStrategy.java
@@ -29,6 +29,9 @@ import org.apache.logging.log4j.plugins.Node;
import org.apache.logging.log4j.plugins.model.PluginNamespace;
import org.apache.logging.log4j.plugins.model.PluginType;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* The default merge strategy for composite configurations.
* <p>
@@ -75,8 +78,8 @@ public class DefaultMergeStrategy implements MergeStrategy {
for (final Map.Entry<String, String> targetAttribute : rootNode.getAttributes().entrySet()) {
if (targetAttribute.getKey().equalsIgnoreCase(attribute.getKey())) {
if (attribute.getKey().equalsIgnoreCase(STATUS)) {
- final Level targetLevel = Level.getLevel(targetAttribute.getValue().toUpperCase());
- final Level sourceLevel = Level.getLevel(attribute.getValue().toUpperCase());
+ final Level targetLevel = Level.getLevel(toRootUpperCase(targetAttribute.getValue()));
+ final Level sourceLevel = Level.getLevel(toRootUpperCase(attribute.getValue()));
if (targetLevel != null && sourceLevel != null) {
if (sourceLevel.isLessSpecificThan(targetLevel)) {
targetAttribute.setValue(attribute.getValue());
@@ -131,7 +134,7 @@ public class DefaultMergeStrategy implements MergeStrategy {
continue;
}
- switch (targetChildNode.getName().toLowerCase()) {
+ switch (toRootLowerCase(targetChildNode.getName())) {
case PROPERTIES:
case SCRIPTS:
case APPENDERS: {
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java
index 965b9284d0..fdace9dfb1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/convert/CoreTypeConverters.java
@@ -42,6 +42,8 @@ import org.apache.logging.log4j.plugins.convert.TypeConverter;
import org.apache.logging.log4j.plugins.convert.TypeConverters;
import org.apache.logging.log4j.util.LoaderUtil;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
* General {@link TypeConverter} implementations.
*
@@ -142,7 +144,7 @@ public final class CoreTypeConverters {
public static class ClassConverter implements TypeConverter<Class<?>> {
@Override
public Class<?> convert(final String s) throws ClassNotFoundException {
- switch (s.toLowerCase()) {
+ switch (toRootLowerCase(s)) {
case "boolean":
return boolean.class;
case "byte":
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
index 352a0624a9..41cf0f6d87 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/Interpolator.java
@@ -17,7 +17,6 @@
package org.apache.logging.log4j.core.lookup;
import java.lang.ref.WeakReference;
-import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
@@ -32,6 +31,8 @@ import org.apache.logging.log4j.plugins.di.DI;
import org.apache.logging.log4j.plugins.di.Injector;
import org.apache.logging.log4j.status.StatusLogger;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
* Proxies other {@link StrLookup}s using a keys within ${} markers.
*/
@@ -167,7 +168,7 @@ public class Interpolator extends AbstractConfigurationAwareLookup implements Lo
final int prefixPos = var.indexOf(PREFIX_SEPARATOR);
if (prefixPos >= 0) {
- final String prefix = var.substring(0, prefixPos).toLowerCase(Locale.US);
+ final String prefix = toRootLowerCase(var.substring(0, prefixPos));
final String name = var.substring(prefixPos + 1);
final Supplier<? extends StrLookup> lookupSupplier = strLookups.get(prefix);
String value = null;
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/LowerLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/LowerLookup.java
index 554483bf9a..71a18b8a20 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/LowerLookup.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/LowerLookup.java
@@ -19,6 +19,8 @@ package org.apache.logging.log4j.core.lookup;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.plugins.Plugin;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
* Converts values to lower case. The passed in "key" should be the value of another lookup.
*/
@@ -33,7 +35,7 @@ public class LowerLookup implements StrLookup {
*/
@Override
public String lookup(final String key) {
- return key != null ? key.toLowerCase() : null;
+ return key != null ? toRootLowerCase(key) : null;
}
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/UpperLookup.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/UpperLookup.java
index 44a541ddda..22952e0aa7 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/UpperLookup.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/UpperLookup.java
@@ -19,6 +19,8 @@ package org.apache.logging.log4j.core.lookup;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.plugins.Plugin;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* Converts values to upper case. The passed in "key" should be the value of another lookup.
*/
@@ -33,7 +35,7 @@ public class UpperLookup implements StrLookup {
*/
@Override
public String lookup(final String key) {
- return key != null ? key.toUpperCase() : null;
+ return key != null ? toRootUpperCase(key) : null;
}
/**
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
index dadab1dc48..c37315e784 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/net/UrlConnectionFactory.java
@@ -24,7 +24,6 @@ import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import java.util.List;
-import java.util.Locale;
import javax.net.ssl.HttpsURLConnection;
@@ -37,6 +36,8 @@ import org.apache.logging.log4j.util.PropertiesUtil;
import org.apache.logging.log4j.util.PropertyEnvironment;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
* Constructs an HTTPURLConnection. This class should be considered to be internal
*/
@@ -61,8 +62,8 @@ public class UrlConnectionFactory {
final SslConfiguration sslConfiguration, final AuthorizationProvider authorizationProvider)
throws IOException {
final PropertyEnvironment props = PropertiesUtil.getProperties();
- final List<String> allowed = Arrays.asList(Strings.splitList(props
- .getStringProperty(ALLOWED_PROTOCOLS, DEFAULT_ALLOWED_PROTOCOLS).toLowerCase(Locale.ROOT)));
+ final List<String> allowed = Arrays.asList(Strings.splitList(toRootLowerCase(props
+ .getStringProperty(ALLOWED_PROTOCOLS, DEFAULT_ALLOWED_PROTOCOLS))));
if (allowed.size() == 1 && NO_PROTOCOLS.equals(allowed.get(0))) {
throw new ProtocolException("No external protocols have been enabled");
}
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
index fe3da49d81..290f5ae3dd 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
@@ -18,7 +18,6 @@ package org.apache.logging.log4j.core.pattern;
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.Configuration;
@@ -33,6 +32,8 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
import org.apache.logging.log4j.util.StringBuilderFormattable;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* Returns the event's rendered message in a StringBuilder.
*/
@@ -52,7 +53,7 @@ public abstract class MessagePatternConverter extends LogEventPatternConverter {
private static TextRenderer loadMessageRenderer(final String[] options) {
if (options != null) {
for (final String option : options) {
- switch (option.toUpperCase(Locale.ROOT)) {
+ switch (toRootUpperCase(option)) {
case "ANSI":
if (Loader.isJansiAvailable()) {
return new JAnsiTextRenderer(options, JAnsiTextRenderer.DefaultMessageStyleMap);
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java
index 5f7b23ab83..11de16d9ce 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/script/ScriptManager.java
@@ -21,6 +21,7 @@ import java.util.Set;
import org.apache.logging.log4j.plugins.Node;
import org.apache.logging.log4j.plugins.di.Key;
+
/**
* Script Manager.
*/
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
index ef7ed9b336..7d6661767e 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/time/internal/format/FastDateParser.java
@@ -36,6 +36,8 @@ import java.util.concurrent.ConcurrentMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* <p>FastDateParser is a fast and thread-safe version of
* {@link java.text.SimpleDateFormat}.</p>
@@ -867,7 +869,7 @@ public class FastDateParser implements DateParser {
final TimeZone tz = TimeZone.getTimeZone("GMT" + value);
cal.setTimeZone(tz);
} else if (value.regionMatches(true, 0, "GMT", 0, 3)) {
- final TimeZone tz = TimeZone.getTimeZone(value.toUpperCase());
+ final TimeZone tz = TimeZone.getTimeZone(toRootUpperCase(value));
cal.setTimeZone(tz);
} else {
final TzInfo tzInfo = tzNames.get(value.toLowerCase(locale));
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
index d1d667308c..241471c0f1 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/tools/picocli/CommandLine.java
@@ -73,6 +73,7 @@ import static java.util.Locale.ENGLISH;
import static org.apache.logging.log4j.core.tools.picocli.CommandLine.Help.Column.Overflow.SPAN;
import static org.apache.logging.log4j.core.tools.picocli.CommandLine.Help.Column.Overflow.TRUNCATE;
import static org.apache.logging.log4j.core.tools.picocli.CommandLine.Help.Column.Overflow.WRAP;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
/**
* <p>
@@ -3877,7 +3878,7 @@ public class CommandLine {
if (o1 == null) { return 1; } else if (o2 == null) { return -1; } // options before params
final String[] names1 = ShortestFirst.sort(o1.names());
final String[] names2 = ShortestFirst.sort(o2.names());
- int result = names1[0].toUpperCase().compareTo(names2[0].toUpperCase()); // case insensitive sort
+ int result = toRootUpperCase(names1[0]).compareTo(toRootUpperCase(names2[0])); // case insensitive sort
result = result == 0 ? -names1[0].compareTo(names2[0]) : result; // lower case before upper case
return o1.help() == o2.help() ? result : o2.help() ? -1 : 1; // help options come last
}
diff --git a/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java b/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java
index 7d1850b876..bde00d4435 100644
--- a/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java
+++ b/log4j-couchdb/src/main/java/org/apache/logging/log4j/couchdb/CouchDbProvider.java
@@ -35,6 +35,8 @@ import org.apache.logging.log4j.util.Strings;
import org.lightcouch.CouchDbClient;
import org.lightcouch.CouchDbProperties;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
* The Apache CouchDB implementation of {@link NoSqlProvider}.
*/
@@ -134,7 +136,7 @@ public final class CouchDbProvider implements NoSqlProvider<CouchDbConnection> {
}
} else if (Strings.isNotEmpty(databaseName)) {
if (protocol != null && protocol.length() > 0) {
- protocol = protocol.toLowerCase();
+ protocol = toRootLowerCase(protocol);
if (!protocol.equals("http") && !protocol.equals("https")) {
LOGGER.error("Only protocols [http] and [https] are supported, [{}] specified.", protocol);
return null;
diff --git a/log4j-jakarta-smtp/src/test/java/org/apache/logging/dumbster/smtp/SmtpRequest.java b/log4j-jakarta-smtp/src/test/java/org/apache/logging/dumbster/smtp/SmtpRequest.java
index fd65d971e3..b2042ea28c 100644
--- a/log4j-jakarta-smtp/src/test/java/org/apache/logging/dumbster/smtp/SmtpRequest.java
+++ b/log4j-jakarta-smtp/src/test/java/org/apache/logging/dumbster/smtp/SmtpRequest.java
@@ -18,6 +18,8 @@ package org.apache.logging.dumbster.smtp;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* Contains an SMTP client request. Handles state transitions using the following state transition table.
* <PRE>
@@ -187,7 +189,7 @@ public class SmtpRequest {
}
}
} else {
- final String su = s.toUpperCase();
+ final String su = toRootUpperCase(s);
if (su.startsWith("EHLO ") || su.startsWith("HELO")) {
action = SmtpActionType.EHLO;
params = s.substring(5);
diff --git a/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java b/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java
index 2dd5e37bcd..a54c10aee3 100644
--- a/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java
+++ b/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.web;
-import java.util.Locale;
import java.util.concurrent.TimeUnit;
import jakarta.servlet.ServletContext;
@@ -27,6 +26,8 @@ import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* In environments older than Servlet 3.0, this initializer is responsible for starting up Log4j logging before anything
* else happens in application initialization. In all environments, this shuts down Log4j after the application shuts
@@ -82,7 +83,7 @@ public class Log4jServletContextListener implements ServletContextListener {
: Long.parseLong(stopTimeoutStr);
final String timeoutTimeUnitStr = servletContext.getInitParameter(KEY_STOP_TIMEOUT_TIMEUNIT);
final TimeUnit timeoutTimeUnit = Strings.isEmpty(timeoutTimeUnitStr) ? DEFAULT_STOP_TIMEOUT_TIMEUNIT
- : TimeUnit.valueOf(timeoutTimeUnitStr.toUpperCase(Locale.ROOT));
+ : TimeUnit.valueOf(toRootUpperCase(timeoutTimeUnitStr));
this.initializer.stop(stopTimeout, timeoutTimeUnit);
}
}
diff --git a/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java b/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java
index 3f88c4ba78..9a2e6a8948 100644
--- a/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java
+++ b/log4j-jakarta-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.web;
-import java.util.Locale;
import java.util.concurrent.TimeUnit;
import jakarta.servlet.ServletContext;
@@ -27,6 +26,8 @@ import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
public class Log4jShutdownOnContextDestroyedListener implements ServletContextListener {
static final int DEFAULT_STOP_TIMEOUT = 30;
@@ -69,7 +70,7 @@ public class Log4jShutdownOnContextDestroyedListener implements ServletContextLi
: Long.parseLong(stopTimeoutStr);
final String timeoutTimeUnitStr = servletContext.getInitParameter(KEY_STOP_TIMEOUT_TIMEUNIT);
final TimeUnit timeoutTimeUnit = Strings.isEmpty(timeoutTimeUnitStr) ? DEFAULT_STOP_TIMEOUT_TIMEUNIT
- : TimeUnit.valueOf(timeoutTimeUnitStr.toUpperCase(Locale.ROOT));
+ : TimeUnit.valueOf(toRootUpperCase(timeoutTimeUnitStr));
this.initializer.stop(stopTimeout, timeoutTimeUnit);
}
}
diff --git a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java
index 5b126b463e..694d0eaa96 100644
--- a/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java
+++ b/log4j-layout-template-json/src/main/java/org/apache/logging/log4j/layout/template/json/util/Uris.java
@@ -34,6 +34,8 @@ import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.LoaderUtil;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
public final class Uris {
private Uris() {}
@@ -79,7 +81,7 @@ public final class Uris {
final URI uri,
final Charset charset)
throws Exception {
- final String uriScheme = uri.getScheme().toLowerCase();
+ final String uriScheme = toRootLowerCase(uri.getScheme());
switch (uriScheme) {
case "classpath":
return readClassPathUri(uri, charset);
diff --git a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/SpringLookup.java b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/SpringLookup.java
index 2af573aa01..2a4cb5bd2a 100644
--- a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/SpringLookup.java
+++ b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/SpringLookup.java
@@ -29,6 +29,8 @@ import org.apache.logging.log4j.plugins.Plugin;
import org.apache.logging.log4j.status.StatusLogger;
import org.springframework.core.env.Environment;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
+
/**
* Lookup for Spring properties.
*/
@@ -48,7 +50,7 @@ public class SpringLookup implements LoggerContextAware, StrLookup {
@Override
public String lookup(final String key) {
if (environment != null) {
- final String lowerKey = key.toLowerCase();
+ final String lowerKey = toRootLowerCase(key);
if (lowerKey.startsWith(ACTIVE)) {
switch (environment.getActiveProfiles().length) {
case 0: {
diff --git a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/TagUtilsLevelTest.java b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/TagUtilsLevelTest.java
index 9708741588..1731077716 100644
--- a/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/TagUtilsLevelTest.java
+++ b/log4j-taglib/src/test/java/org/apache/logging/log4j/taglib/TagUtilsLevelTest.java
@@ -24,6 +24,7 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import static org.apache.logging.log4j.util.Strings.toRootLowerCase;
import static org.junit.Assert.*;
@RunWith(Parameterized.class)
@@ -42,7 +43,7 @@ public class TagUtilsLevelTest {
final Collection<Object[]> params = new ArrayList<>();
// this is perhaps the laziest way to test all the known levels
for (final Level level : Level.values()) {
- params.add(new Object[]{level, level.name().toLowerCase()});
+ params.add(new Object[]{level, toRootLowerCase(level.name())});
}
return params;
}
diff --git a/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java b/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java
index 39277946dd..56020841c2 100644
--- a/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java
+++ b/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jServletContextListener.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.web;
-import java.util.Locale;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContext;
@@ -27,6 +26,8 @@ import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
/**
* In environments older than Servlet 3.0, this initializer is responsible for starting up Log4j logging before anything
* else happens in application initialization. In all environments, this shuts down Log4j after the application shuts
@@ -82,7 +83,7 @@ public class Log4jServletContextListener implements ServletContextListener {
: Long.parseLong(stopTimeoutStr);
final String timeoutTimeUnitStr = servletContext.getInitParameter(KEY_STOP_TIMEOUT_TIMEUNIT);
final TimeUnit timeoutTimeUnit = Strings.isEmpty(timeoutTimeUnitStr) ? DEFAULT_STOP_TIMEOUT_TIMEUNIT
- : TimeUnit.valueOf(timeoutTimeUnitStr.toUpperCase(Locale.ROOT));
+ : TimeUnit.valueOf(toRootUpperCase(timeoutTimeUnitStr));
this.initializer.stop(stopTimeout, timeoutTimeUnit);
}
}
diff --git a/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java b/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java
index bfe845cb6b..bf97500486 100644
--- a/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java
+++ b/log4j-web/src/main/java/org/apache/logging/log4j/web/Log4jShutdownOnContextDestroyedListener.java
@@ -16,7 +16,6 @@
*/
package org.apache.logging.log4j.web;
-import java.util.Locale;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContext;
@@ -27,6 +26,8 @@ import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.Strings;
+import static org.apache.logging.log4j.util.Strings.toRootUpperCase;
+
public class Log4jShutdownOnContextDestroyedListener implements ServletContextListener {
static final int DEFAULT_STOP_TIMEOUT = 30;
@@ -69,7 +70,7 @@ public class Log4jShutdownOnContextDestroyedListener implements ServletContextLi
: Long.parseLong(stopTimeoutStr);
final String timeoutTimeUnitStr = servletContext.getInitParameter(KEY_STOP_TIMEOUT_TIMEUNIT);
final TimeUnit timeoutTimeUnit = Strings.isEmpty(timeoutTimeUnitStr) ? DEFAULT_STOP_TIMEOUT_TIMEUNIT
- : TimeUnit.valueOf(timeoutTimeUnitStr.toUpperCase(Locale.ROOT));
+ : TimeUnit.valueOf(toRootUpperCase(timeoutTimeUnitStr));
this.initializer.stop(stopTimeout, timeoutTimeUnit);
}
}