You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/04/15 17:51:46 UTC

logging-log4j2 git commit: LOG4J2-1368 StatusLogger dropped exceptions when logging parameterized messages.

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 71fbda804 -> afb720740


LOG4J2-1368 StatusLogger dropped exceptions when logging parameterized messages.


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

Branch: refs/heads/master
Commit: afb72074094471f1f7ce9fd0db443ed5f4d2416d
Parents: 71fbda8
Author: rpopma <rp...@apache.org>
Authored: Sat Apr 16 00:51:44 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Apr 16 00:51:44 2016 +0900

----------------------------------------------------------------------
 .../ParameterizedNoReferenceMessageFactory.java | 39 +++++++++++++++++++-
 src/changes/changes.xml                         |  3 ++
 2 files changed, 40 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/afb72074/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
index 80349ed..ca18d11 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterizedNoReferenceMessageFactory.java
@@ -33,6 +33,41 @@ public final class ParameterizedNoReferenceMessageFactory extends AbstractMessag
     private static final long serialVersionUID = 5027639245636870500L;
 
     /**
+     * Message implementation that only keeps a reference to the error text and the error (if any), not to the
+     * message parameters, in order to avoid memory leaks. This addresses LOG4J2-1368.
+     * @since 2.6
+     */
+    static class StatusMessage implements Message {
+        private final String formattedMessage;
+        private final Throwable throwable;
+
+        public StatusMessage(final String formattedMessage, final Throwable throwable) {
+            this.formattedMessage = formattedMessage;
+            this.throwable = throwable;
+        }
+
+        @Override
+        public String getFormattedMessage() {
+            return formattedMessage;
+        }
+
+        @Override
+        public String getFormat() {
+            return formattedMessage;
+        }
+
+        @Override
+        public Object[] getParameters() {
+            return null;
+        }
+
+        @Override
+        public Throwable getThrowable() {
+            return throwable;
+        }
+    }
+
+    /**
      * Constructs a message factory with default flow strings.
      */
     public ParameterizedNoReferenceMessageFactory() {
@@ -58,7 +93,7 @@ public final class ParameterizedNoReferenceMessageFactory extends AbstractMessag
         if (params == null) {
             return new SimpleMessage(message);
         }
-        final String formatted = new ParameterizedMessage(message, params).getFormattedMessage();
-        return new SimpleMessage(formatted);
+        final ParameterizedMessage msg = new ParameterizedMessage(message, params);
+        return new StatusMessage(msg.getFormattedMessage(), msg.getThrowable());
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/afb72074/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index f296b9f..6413280 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -24,6 +24,9 @@
   </properties>
   <body>
     <release version="2.6" date="2016-MM-DD" description="GA Release 2.6">
+      <action issue="LOG4J2-1368" dev="rpopma" type="fix">
+        (Log4j-internal) StatusLogger dropped exceptions when logging parameterized messages.
+      </action>
       <action issue="LOG4J2-1326" dev="rpopma" type="add">
         (GC) Added methods to the Logger interface for logging CharSequence messages.
       </action>