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);

Reply via email to