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
