Index: log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/PropertiesMessage.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/PropertiesMessage.java	(revision )
+++ log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/PropertiesMessage.java	(revision )
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache license, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the license for the specific language governing permissions and
+ * limitations under the license.
+ */
+package org.apache.logging.log4j.lookup;
+
+import org.apache.logging.log4j.message.Message;
+import org.apache.logging.log4j.util.Strings;
+
+import java.util.Map;
+
+/**
+ *
+ */
+public class PropertiesMessage implements Message {
+
+    private final String message;
+    private final Map<String, String> properties;
+
+    public PropertiesMessage(String msg, Map<String, String> properties) {
+        this.message = msg;
+        this.properties = properties;
+    }
+
+    @Override
+    public String getFormattedMessage() {
+        return message;
+    }
+
+    @Override
+    public String getFormat() {
+        return Strings.EMPTY;
+    }
+
+    @Override
+    public Object[] getParameters() {
+        return null;
+    }
+
+    @Override
+    public Throwable getThrowable() {
+        return null;
+    }
+
+    Map<String, String> getProperties() {
+        return properties;
+    }
+
+}
Index: log4j-samples/loggerProperties/src/test/resources/log4j2.xml
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- log4j-samples/loggerProperties/src/test/resources/log4j2.xml	(revision 1127b3902e269387d87759f98d54b8cb863febca)
+++ log4j-samples/loggerProperties/src/test/resources/log4j2.xml	(revision )
@@ -18,31 +18,31 @@
 -->
 <Configuration name="XMLPerfTest" status="error">
     <Appenders>
-        <File name="TestLogfile" fileName="target/testlog4j2.log" immediateFlush="false">
+        <Console name="Console" target="SYSTEM_OUT">
             <PatternLayout>
-                <Pattern>%d %5p [%t] %c{1}  - %m%n</Pattern>
+                <Pattern>%d %5p [%t] %c{1} %X - %m%n</Pattern>
             </PatternLayout>
-        </File>
-        <RandomAccessFile name="RandomAccessLogFile" fileName="target/testCustomlog4j2.log" immediateFlush="false">
-            <PatternLayout>
-                <Pattern>%d %5p [%t] %c{1} %X{key1} %X{key2} - %m%n</Pattern>
-            </PatternLayout>
-        </RandomAccessFile>
+        </Console>
     </Appenders>
     <Loggers>
         <Logger name="TestProperties" level="debug" additivity="false">
             <Property name="key1">$${custom:key1}</Property>
             <Property name="key2">$${custom:key2}</Property>
-            <AppenderRef ref="RandomAccessLogFile"/>
+            <AppenderRef ref="Console"/>
         </Logger>
         <Logger name="MapProperties" level="debug" additivity="false">
             <Property name="key1">$${mapMessage:key1}</Property>
-            <Property name="key2">$${mapMessage:key2}</Property>
-            <AppenderRef ref="RandomAccessLogFile"/>
+            <Property name="key2">$${key2}</Property>
+            <AppenderRef ref="Console"/>
         </Logger>
+        <Logger name="PropertiesMessageProperties" level="debug" additivity="false">
+            <Property name="key1">$${propertiesMessage:key1}</Property>
+            <Property name="key2">$${propertiesMessage:key2}</Property>
+            <AppenderRef ref="Console"/>
+        </Logger>
 
         <Root level="debug">
-            <AppenderRef ref="TestLogfile"/>
+            <AppenderRef ref="Console"/>
         </Root>
     </Loggers>
 </Configuration>
\ No newline at end of file
Index: log4j-samples/loggerProperties/src/test/java/org/apache/logging/log4j/CustomPropertiesTest.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- log4j-samples/loggerProperties/src/test/java/org/apache/logging/log4j/CustomPropertiesTest.java	(revision 1127b3902e269387d87759f98d54b8cb863febca)
+++ log4j-samples/loggerProperties/src/test/java/org/apache/logging/log4j/CustomPropertiesTest.java	(revision )
@@ -18,8 +18,10 @@
 
 import org.apache.logging.log4j.lookup.CustomLookup;
 import org.apache.logging.log4j.lookup.CustomMapMessage;
+import org.apache.logging.log4j.lookup.PropertiesMessage;
 import org.junit.Test;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -41,11 +43,19 @@
     @Test
     public void mapMessageProperties() throws Exception {
         Logger logger = LogManager.getLogger("MapProperties");
-        Map<String, String> loggerProperties = new ConcurrentHashMap<>();
+        Map<String, String> loggerProperties = new HashMap<>();
         loggerProperties.put("key1", "CustomPropertiesTest");
         loggerProperties.put("key2", "TestValue");
         logger.debug(new CustomMapMessage("This is a test", loggerProperties));
     }
 
+    @Test
+    public void propertiesMessageProperties() throws Exception {
+        Logger logger = LogManager.getLogger("PropertiesMessageProperties");
+        Map<String, String> loggerProperties = new HashMap<>();
+        loggerProperties.put("key1", "CustomPropertiesTest");
+        loggerProperties.put("key2", "TestValue");
+        logger.debug(new PropertiesMessage("This is a test", loggerProperties));
+    }
 
 }
Index: log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/MapMessageLookup.java
===================================================================
--- log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/MapMessageLookup.java	(revision 1127b3902e269387d87759f98d54b8cb863febca)
+++ log4j-samples/loggerProperties/src/main/java/org/apache/logging/log4j/lookup/PropertiesMessageLookup.java	(revision )
@@ -23,26 +23,21 @@
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.lookup.AbstractLookup;
 import org.apache.logging.log4j.core.lookup.StrLookup;
-import org.apache.logging.log4j.message.MapMessage;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.status.StatusLogger;
 
 import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 
 /**
  *
  */
 
-@Plugin(name = "mapMessage", category = StrLookup.CATEGORY)
-public class MapMessageLookup extends AbstractLookup {
+@Plugin(name = "propertiesMessage", category = StrLookup.CATEGORY)
+public class PropertiesMessageLookup extends AbstractLookup {
 
     private static final Logger LOGGER = StatusLogger.getLogger();
     private static final Marker LOOKUP = MarkerManager.getMarker("LOOKUP");
 
-    private static ConcurrentMap<String, Map<String, String>> loggerProperties = new ConcurrentHashMap<>();
-
     /**
      * Looks up the value for the key using the data in the LogEvent.
      * @param event The current LogEvent.
@@ -52,9 +47,9 @@
     @Override
     public String lookup(final LogEvent event, final String key) {
         Message msg = event.getMessage();
-        if (msg instanceof MapMessage) {
+        if (msg instanceof PropertiesMessage) {
             try {
-                Map<String, String> properties = ((MapMessage) msg).getData();
+                Map<String, String> properties = ((PropertiesMessage) msg).getProperties();
                 if (properties == null) {
                     return "";
                 }
@@ -80,10 +75,6 @@
         } else {
             return null;
         }
-    }
-
-    public static void setLoggerProperties(String loggerName, Map<String, String> properties) {
-        loggerProperties.put(loggerName, properties);
     }
 
 }
