LOG4J2-2109: Added "log4j.formatMsgNoLookups" global configuration
This allows applications to globally disable message pattern from looking up replacements without specifying "%m{nolookups}". Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/dd18e9b2 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/dd18e9b2 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/dd18e9b2 Branch: refs/heads/master Commit: dd18e9b21009055e226daf5b233c92b6a17934ca Parents: d5c4293 Author: Carter Kozak <c4kof...@gmail.com> Authored: Thu Nov 9 08:32:14 2017 -0500 Committer: Mikael Ståldal <mik...@staldal.nu> Committed: Sun Nov 12 15:28:55 2017 +0100 ---------------------------------------------------------------------- .../core/pattern/MessagePatternConverter.java | 3 +- .../logging/log4j/core/util/Constants.java | 9 +++++ .../pattern/MessagePatternConverterTest.java | 41 ++++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dd18e9b2/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java ---------------------------------------------------------------------- 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 7b1d77e..92d75a2 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 @@ -22,6 +22,7 @@ import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.util.ArrayUtils; +import org.apache.logging.log4j.core.util.Constants; import org.apache.logging.log4j.core.util.Loader; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.MultiformatMessage; @@ -56,7 +57,7 @@ public final class MessagePatternConverter extends LogEventPatternConverter { this.formats = options; this.config = config; final int noLookupsIdx = loadNoLookups(options); - this.noLookups = noLookupsIdx >= 0; + this.noLookups = Constants.FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS || noLookupsIdx >= 0; this.textRenderer = loadMessageRenderer(noLookupsIdx >= 0 ? ArrayUtils.remove(options, noLookupsIdx) : options); } http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dd18e9b2/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java index aa8b74d..ef30491 100644 --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Constants.java @@ -55,6 +55,15 @@ public final class Constants { "log4j.format.msg.async", false); /** + * LOG4J2-2109 if {@code true}, MessagePatternConverter will always operate as though + * <pre>%m{nolookups}</pre> is configured. + * + * @since 2.10 + */ + public static final boolean FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS = PropertiesUtil.getProperties().getBooleanProperty( + "log4j.formatMsgNoLookups", false); + + /** * {@code true} if we think we are running in a web container, based on the boolean value of system property * "log4j2.is.webapp", or (if this system property is not set) whether the {@code javax.servlet.Servlet} class * is present in the classpath. http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/dd18e9b2/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java ---------------------------------------------------------------------- diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java index 8a1fb0c..cd85071 100644 --- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/MessagePatternConverterTest.java @@ -17,12 +17,15 @@ package org.apache.logging.log4j.core.pattern; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.Configuration; import org.apache.logging.log4j.core.config.DefaultConfiguration; +import org.apache.logging.log4j.core.config.builder.impl.DefaultConfigurationBuilder; import org.apache.logging.log4j.core.impl.Log4jLogEvent; +import org.apache.logging.log4j.core.util.Constants; import org.apache.logging.log4j.message.Message; import org.apache.logging.log4j.message.ParameterizedMessage; import org.apache.logging.log4j.message.SimpleMessage; @@ -77,6 +80,44 @@ public class MessagePatternConverterTest { } @Test + public void testLookupEnabledByDefault() { + assertFalse("Expected lookups to be enabled", Constants.FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS); + } + + @Test + public void testLookup() { + final Configuration config = new DefaultConfigurationBuilder() + .addProperty("foo", "bar") + .build(true); + final MessagePatternConverter converter = MessagePatternConverter.newInstance(config, null); + final Message msg = new ParameterizedMessage("${foo}"); + final LogEvent event = Log4jLogEvent.newBuilder() // + .setLoggerName("MyLogger") // + .setLevel(Level.DEBUG) // + .setMessage(msg).build(); + final StringBuilder sb = new StringBuilder(); + converter.format(event, sb); + assertEquals("Unexpected result", "bar", sb.toString()); + } + + @Test + public void testDisabledLookup() { + final Configuration config = new DefaultConfigurationBuilder() + .addProperty("foo", "bar") + .build(true); + final MessagePatternConverter converter = MessagePatternConverter.newInstance( + config, new String[] {"nolookups"}); + final Message msg = new ParameterizedMessage("${foo}"); + final LogEvent event = Log4jLogEvent.newBuilder() // + .setLoggerName("MyLogger") // + .setLevel(Level.DEBUG) // + .setMessage(msg).build(); + final StringBuilder sb = new StringBuilder(); + converter.format(event, sb); + assertEquals("Expected the raw pattern string without lookup", "${foo}", sb.toString()); + } + + @Test public void testPatternWithConfiguration() throws Exception { final Configuration config = new DefaultConfiguration(); final MessagePatternConverter converter = MessagePatternConverter.newInstance(config, null);