Repository: logging-log4j2
Updated Branches:
  refs/heads/master a5f3b03aa -> 3c3a9e4a1


[LOG4J2-1990] ConcurrentModificationException logging a parameter of
type Map. Another go at it based on Ralph's suggestion.

Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/3c3a9e4a
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/3c3a9e4a
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/3c3a9e4a

Branch: refs/heads/master
Commit: 3c3a9e4a1d8d53a4fd2dfa302633380eaa08c6da
Parents: a5f3b03
Author: Gary Gregory <[email protected]>
Authored: Sat Jul 29 19:26:39 2017 -0700
Committer: Gary Gregory <[email protected]>
Committed: Sat Jul 29 19:26:39 2017 -0700

----------------------------------------------------------------------
 .../logging/log4j/spi/AbstractLogger.java       | 11 ++++++++++
 .../log4j/core/impl/MutableLogEvent.java        | 22 +++++---------------
 2 files changed, 16 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3c3a9e4a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
----------------------------------------------------------------------
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java 
b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
index 7504787..949c1b9 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/AbstractLogger.java
@@ -2089,6 +2089,17 @@ public abstract class AbstractLogger implements 
ExtendedLogger, Serializable {
             final Throwable throwable) {
         try {
             logMessage(fqcn, level, marker, msg, throwable);
+        } catch (Exception e) {
+            final String format = msg.getFormat();
+            final StringBuilder sb = new StringBuilder(format.length() + 100);
+            sb.append(fqcn);
+            sb.append(": ");
+            sb.append(e.getClass().getName());
+            sb.append(" logging a ");
+            sb.append(msg.getClass().getSimpleName());
+            sb.append(": ");
+            sb.append(format);
+            StatusLogger.getLogger().warn(sb.toString(), e);
         } finally {
             // LOG4J2-1583 prevent scrambled logs when logging calls are 
nested (logging in toString())
             ReusableMessageFactory.release(msg);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/3c3a9e4a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
index f8d7ed6..50c30bf 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
@@ -208,23 +208,11 @@ public class MutableLogEvent implements LogEvent, 
ReusableMessage {
 
     public void setMessage(final Message msg) {
         if (msg instanceof ReusableMessage) {
-            try {
-                final ReusableMessage reusable = (ReusableMessage) msg;
-                reusable.formatTo(getMessageTextForWriting());
-                if (parameters != null) {
-                    parameters = reusable.swapParameters(parameters);
-                    parameterCount = reusable.getParameterCount();
-                }
-            } catch (Exception e) {
-                StringBuilder sb = getMessageTextForWriting();
-                sb.append(getClass().getSimpleName());
-                sb.append(": ");
-                sb.append(e.getClass().getName());
-                sb.append(" in setting a ");
-                sb.append(msg.getClass().getSimpleName());
-                sb.append("; format: ");
-                sb.append(msg.getFormat());
-                StatusLogger.getLogger().warn(sb.toString(), e);
+            final ReusableMessage reusable = (ReusableMessage) msg;
+            reusable.formatTo(getMessageTextForWriting());
+            if (parameters != null) {
+                parameters = reusable.swapParameters(parameters);
+                parameterCount = reusable.getParameterCount();
             }
         } else {
             // if the Message instance is reused, there is no point in 
freezing its message here

Reply via email to