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/07 17:42:30 UTC

[01/13] logging-log4j2 git commit: LOG4J2-1326 modify SimpleMessage and ReusableSimpleMessage so they can carry CharSequence

Repository: logging-log4j2
Updated Branches:
  refs/heads/master 67ca08b2a -> fc79e8b67


LOG4J2-1326 modify SimpleMessage and ReusableSimpleMessage so they can carry CharSequence


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

Branch: refs/heads/master
Commit: ebb01542030df6961c2db5b4bfe3e2c685d541e8
Parents: 450c98d
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:05:04 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:05:04 2016 +0900

----------------------------------------------------------------------
 .../log4j/message/ReusableSimpleMessage.java    | 16 +++++---
 .../logging/log4j/message/SimpleMessage.java    | 43 +++++++++++++++++---
 2 files changed, 48 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ebb01542/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
index 01e2e74..a0954dc 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableSimpleMessage.java
@@ -26,20 +26,24 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
 public class ReusableSimpleMessage implements ReusableMessage {
     private static final long serialVersionUID = -9199974506498249809L;
     private static Object[] EMPTY_PARAMS = new Object[0];
-    private String message;
+    private CharSequence charSequence;
 
-    public void set(String message) {
-        this.message = message;
+    public void set(final String message) {
+        this.charSequence = message;
+    }
+
+    public void set(final CharSequence charSequence) {
+        this.charSequence = charSequence;
     }
 
     @Override
     public String getFormattedMessage() {
-        return message;
+        return String.valueOf(charSequence);
     }
 
     @Override
     public String getFormat() {
-        return message;
+        return getFormattedMessage();
     }
 
     @Override
@@ -54,7 +58,7 @@ public class ReusableSimpleMessage implements ReusableMessage {
 
     @Override
     public void formatTo(final StringBuilder buffer) {
-        buffer.append(message);
+        buffer.append(charSequence);
     }
 }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ebb01542/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
index d5c8b88..106040e 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/SimpleMessage.java
@@ -16,6 +16,11 @@
  */
 package org.apache.logging.log4j.message;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+
 import org.apache.logging.log4j.util.StringBuilderFormattable;
 
 /**
@@ -24,7 +29,8 @@ import org.apache.logging.log4j.util.StringBuilderFormattable;
 public class SimpleMessage implements Message, StringBuilderFormattable {
     private static final long serialVersionUID = -8398002534962715992L;
 
-    private final String message;
+    private String message;
+    private transient CharSequence charSequence;
 
     /**
      * Basic constructor.
@@ -39,6 +45,16 @@ public class SimpleMessage implements Message, StringBuilderFormattable {
      */
     public SimpleMessage(final String message) {
         this.message = message;
+        this.charSequence = message;
+    }
+
+    /**
+     * Constructor that includes the message.
+     * @param charSequence The CharSequence message.
+     */
+    public SimpleMessage(final CharSequence charSequence) {
+        // this.message = String.valueOf(charSequence); // postponed until getFormattedMessage
+        this.charSequence = charSequence;
     }
 
     /**
@@ -47,12 +63,15 @@ public class SimpleMessage implements Message, StringBuilderFormattable {
      */
     @Override
     public String getFormattedMessage() {
+        if (message == null) {
+            message = String.valueOf(charSequence);
+        }
         return message;
     }
 
     @Override
     public void formatTo(final StringBuilder buffer) {
-        buffer.append(message);
+        buffer.append(charSequence);
     }
 
     /**
@@ -61,7 +80,7 @@ public class SimpleMessage implements Message, StringBuilderFormattable {
      */
     @Override
     public String getFormat() {
-        return message;
+        return getFormattedMessage();
     }
 
     /**
@@ -84,12 +103,12 @@ public class SimpleMessage implements Message, StringBuilderFormattable {
 
         final SimpleMessage that = (SimpleMessage) o;
 
-        return !(message != null ? !message.equals(that.message) : that.message != null);
+        return !(charSequence != null ? !charSequence.equals(that.charSequence) : that.charSequence != null);
     }
 
     @Override
     public int hashCode() {
-        return message != null ? message.hashCode() : 0;
+        return charSequence != null ? charSequence.hashCode() : 0;
     }
 
     @Override
@@ -106,4 +125,18 @@ public class SimpleMessage implements Message, StringBuilderFormattable {
     public Throwable getThrowable() {
         return null;
     }
+
+    private void writeObject(final ObjectOutputStream out) throws IOException {
+        out.defaultWriteObject();
+        if (charSequence instanceof Serializable) {
+            out.writeObject(charSequence);
+        } else {
+            out.writeObject(String.valueOf(charSequence));
+        }
+    }
+
+    private void readObject(final ObjectInputStream in) throws IOException, ClassNotFoundException {
+        in.defaultReadObject();
+        charSequence = (CharSequence) in.readObject();
+    }
 }


[10/13] logging-log4j2 git commit: LOG4J2-1326 SimpleMessage serialized format changed

Posted by rp...@apache.org.
LOG4J2-1326 SimpleMessage serialized format changed


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

Branch: refs/heads/master
Commit: 7b63d6c148ae2144255fff10057983c68bf62e67
Parents: 0cec18a
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:18:05 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:18:05 2016 +0900

----------------------------------------------------------------------
 .../log4j/core/impl/Log4jLogEventTest.java      | 39 ++++++++++----------
 1 file changed, 20 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7b63d6c1/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
index 0a7df37..6388b15 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
@@ -55,7 +55,7 @@ public class Log4jLogEventTest {
 
         /*
          * (non-Javadoc)
-         * 
+         *
          * @see org.apache.logging.log4j.core.helpers.Clock#currentTimeMillis()
          */
         @Override
@@ -164,7 +164,7 @@ public class Log4jLogEventTest {
         final Message msg = new SimpleMessage("abc");
         final String threadName = Thread.currentThread().getName();
         final String errorMessage = "OMG I've been deleted!";
-        
+
         // DO NOT DELETE THIS COMMENT:
         // UNCOMMENT TO RE-GENERATE SERIALIZED EVENT WHEN UPDATING THIS TEST.
         // final Exception thrown = new DeletedException(errorMessage);
@@ -173,9 +173,10 @@ public class Log4jLogEventTest {
         // String base64Str = DatatypeConverter.printBase64Binary(binary);
         // System.out.println("final String base64 = \"" + base64Str.replaceAll("\r\n", "\\\\r\\\\n\" +\r\n\"") +
         // "\";");
-        
-        final String base64_v_2_5 = "rO0ABXNyAD5vcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnQkTG9nRXZlbnRQcm94eZztD11w2ioWAgANWgAMaXNFbmRPZkJhdGNoWgASaXNMb2NhdGlvblJlcXVpcmVkSgAKdGltZU1pbGxpc0wACmNvbnRleHRNYXB0AA9MamF2YS91dGlsL01hcDtMAAxjb250ZXh0U3RhY2t0ADVMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL1RocmVhZENvbnRleHQkQ29udGV4dFN0YWNrO0wABWxldmVsdAAgTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9MZXZlbDtMAApsb2dnZXJGUUNOdAASTGphdmEvbGFuZy9TdHJpbmc7TAAKbG9nZ2VyTmFtZXEAfgAETAAGbWFya2VydAAhTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9NYXJrZXI7TAAHbWVzc2FnZXQAKkxvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovbWVzc2FnZS9NZXNzYWdlO0wABnNvdXJjZXQAHUxqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7TAAKdGhyZWFkTmFtZXEAfgAETAALdGhyb3duUHJveHl0ADNMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL2NvcmUvaW1wbC9UaHJvd2FibGVQcm94eTt4cAAAAAAAAEmWAtJzcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyAD5vcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouVGhyZWFkQ29udGV4dCRFbXB0eVRocmVhZENvbnRleHRTdGFjawAAAAAAAAABAgAAeHBzcgAeb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRq
 LkxldmVsAAAAAAAYIBoCAANJAAhpbnRMZXZlbEwABG5hbWVxAH4ABEwADXN0YW5kYXJkTGV2ZWx0ACxMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL3NwaS9TdGFuZGFyZExldmVsO3hwAAABkHQABElORk9+cgAqb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLnNwaS5TdGFuZGFyZExldmVsAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAESU5GT3QAAHQACXNvbWUudGVzdHBzcgAub3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLm1lc3NhZ2UuU2ltcGxlTWVzc2FnZYt0TTBgt6KoAgABTAAHbWVzc2FnZXEAfgAEeHB0AANhYmNwdAAEbWFpbnNyADFvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLlRocm93YWJsZVByb3h52cww1Zp7rPoCAAdJABJjb21tb25FbGVtZW50Q291bnRMAApjYXVzZVByb3h5cQB+AAhbABJleHRlbmRlZFN0YWNrVHJhY2V0AD9bTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvRXh0ZW5kZWRTdGFja1RyYWNlRWxlbWVudDtMABBsb2NhbGl6ZWRNZXNzYWdlcQB+AARMAAdtZXNzYWdlcQB+AARMAARuYW1lcQB+AARbABFzdXBwcmVzc2VkUHJveGllc3QANFtMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL2NvcmUvaW1wbC9UaHJvd2FibGVQcm94eTt4cAAAAABwdXIAP1tMb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5FeHRlbmRlZFN0YWNrVHJhY2VFbGVtZW50O8rPiCOlx8+8AgAAeHAAAAAac3IAPG9yZy5hcGFjaGUubG9nZ2luZ
 y5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRTdGFja1RyYWNlRWxlbWVudOHez7rGtpAHAgACTAAOZXh0cmFDbGFzc0luZm90ADZMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL2NvcmUvaW1wbC9FeHRlbmRlZENsYXNzSW5mbztMABFzdGFja1RyYWNlRWxlbWVudHEAfgAHeHBzcgA0b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5FeHRlbmRlZENsYXNzSW5mbwAAAAAAAAABAgADWgAFZXhhY3RMAAhsb2NhdGlvbnEAfgAETAAHdmVyc2lvbnEAfgAEeHABdAANdGVzdC1jbGFzc2VzL3QAAT9zcgAbamF2YS5sYW5nLlN0YWNrVHJhY2VFbGVtZW50YQnFmiY23YUCAARJAApsaW5lTnVtYmVyTAAOZGVjbGFyaW5nQ2xhc3NxAH4ABEwACGZpbGVOYW1lcQB+AARMAAptZXRob2ROYW1lcQB+AAR4cAAAAJh0ADRvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnRUZXN0dAAWTG9nNGpMb2dFdmVudFRlc3QuamF2YXQAKnRlc3RKYXZhSW9TZXJpYWxpemFibGVXaXRoVW5rbm93blRocm93YWJsZXNxAH4AInNxAH4AJQBxAH4AKHQACDEuNy4wXzU1c3EAfgAp/////nQAJHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbHB0AAdpbnZva2Uwc3EAfgAic3EAfgAlAHEAfgAocQB+ADBzcQB+ACn/////cQB+ADJwdAAGaW52b2tlc3EAfgAic3EAfgAlAHEAfgAocQB+ADBzcQB+ACn/////dAAoc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbHBxAH4AN3NxAH
 4AInNxAH4AJQBxAH4AKHEAfgAwc3EAfgAp/////3QAGGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZHBxAH4AN3NxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAL3QAKW9yZy5qdW5pdC5ydW5uZXJzLm1vZGVsLkZyYW1ld29ya01ldGhvZCQxdAAURnJhbWV3b3JrTWV0aG9kLmphdmF0ABFydW5SZWZsZWN0aXZlQ2FsbHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAADHQAM29yZy5qdW5pdC5pbnRlcm5hbC5ydW5uZXJzLm1vZGVsLlJlZmxlY3RpdmVDYWxsYWJsZXQAF1JlZmxlY3RpdmVDYWxsYWJsZS5qYXZhdAADcnVuc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTEuamFycQB+AChzcQB+ACkAAAAsdAAnb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuRnJhbWV3b3JrTWV0aG9kcQB+AEV0ABFpbnZva2VFeHBsb3NpdmVseXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAEXQAMm9yZy5qdW5pdC5pbnRlcm5hbC5ydW5uZXJzLnN0YXRlbWVudHMuSW52b2tlTWV0aG9kdAARSW52b2tlTWV0aG9kLmphdmF0AAhldmFsdWF0ZXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAABD3QAHm9yZy5qdW5pdC5ydW5uZXJzLlBhcmVudFJ1bm5lcnQAEVBhcmVudFJ1bm5lci5qYXZhdAAHcnVuTGVhZnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAARnQAKG9yZy5qdW5pdC5ydW5uZXJzLkJsb2NrSlV
 uaXQ0Q2xhc3NSdW5uZXJ0ABtCbG9ja0pVbml0NENsYXNzUnVubmVyLmphdmF0AAhydW5DaGlsZHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAMnEAfgBmcQB+AGdxAH4AaHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAA7nQAIG9yZy5qdW5pdC5ydW5uZXJzLlBhcmVudFJ1bm5lciQzcQB+AGBxAH4ATXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAP3QAIG9yZy5qdW5pdC5ydW5uZXJzLlBhcmVudFJ1bm5lciQxcQB+AGB0AAhzY2hlZHVsZXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAA7HEAfgBfcQB+AGB0AAtydW5DaGlsZHJlbnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAANXEAfgBfcQB+AGB0AAphY2Nlc3MkMDAwc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTEuamFycQB+AChzcQB+ACkAAADldAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDJxAH4AYHEAfgBac3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTEuamFycQB+AChzcQB+ACkAAAAadAAwb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMuc3RhdGVtZW50cy5SdW5CZWZvcmVzdAAPUnVuQmVmb3Jlcy5qYXZhcQB+AFpzcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMS5qYXJxAH4AKHNxAH4AKQAAABt0AC9vcmcuanVuaXQuaW50ZXJuYWwucnVubmVycy5zdGF0ZW1lbnRzLlJ1bkFmdGVyc3QADlJ1
 bkFmdGVycy5qYXZhcQB+AFpzcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMS5qYXJxAH4AKHNxAH4AKQAAATVxAH4AX3EAfgBgcQB+AE1zcQB+ACJzcQB+ACUBdAAELmNwL3EAfgAoc3EAfgApAAAAMnQAOm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5qdW5pdDQucnVubmVyLkpVbml0NFRlc3RSZWZlcmVuY2V0ABhKVW5pdDRUZXN0UmVmZXJlbmNlLmphdmFxAH4ATXNxAH4AInNxAH4AJQF0AAQuY3AvcQB+AChzcQB+ACkAAAAmdAAzb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmp1bml0LnJ1bm5lci5UZXN0RXhlY3V0aW9udAASVGVzdEV4ZWN1dGlvbi5qYXZhcQB+AE1zcQB+ACJzcQB+ACUBdAAELmNwL3EAfgAoc3EAfgApAAAB03QANm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5qdW5pdC5ydW5uZXIuUmVtb3RlVGVzdFJ1bm5lcnQAFVJlbW90ZVRlc3RSdW5uZXIuamF2YXQACHJ1blRlc3Rzc3EAfgAic3EAfgAlAXQABC5jcC9xAH4AKHNxAH4AKQAAAqtxAH4Ap3EAfgCocQB+AKlzcQB+ACJzcQB+ACUBdAAELmNwL3EAfgAoc3EAfgApAAABhnEAfgCncQB+AKhxAH4ATXNxAH4AInNxAH4AJQF0AAQuY3AvcQB+AChzcQB+ACkAAADFcQB+AKdxAH4AqHQABG1haW50ABZPTUcgSSd2ZSBiZWVuIGRlbGV0ZWQhcQB+ALd0AEVvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnRUZXN0JERlbGV0ZWRFeGNlcHRpb251cgA0W0xvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLlRocm93Y
 WJsZVByb3h5O/rtAeCFous5AgAAeHAAAAAA";
-        final String base64 = "rO0ABXNyAD5vcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnQkTG9nRXZlbnRQcm94eYgtmn+yXsP9AgAPWgAMaXNFbmRPZkJhdGNoWgASaXNMb2NhdGlvblJlcXVpcmVkSgAIdGhyZWFkSWRJAA50aHJlYWRQcmlvcml0eUoACnRpbWVNaWxsaXNMAApjb250ZXh0TWFwdAAPTGphdmEvdXRpbC9NYXA7TAAMY29udGV4dFN0YWNrdAA1TG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9UaHJlYWRDb250ZXh0JENvbnRleHRTdGFjaztMAAVsZXZlbHQAIExvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovTGV2ZWw7TAAKbG9nZ2VyRlFDTnQAEkxqYXZhL2xhbmcvU3RyaW5nO0wACmxvZ2dlck5hbWVxAH4ABEwABm1hcmtlcnQAIUxvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovTWFya2VyO0wAB21lc3NhZ2V0ACpMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL21lc3NhZ2UvTWVzc2FnZTtMAAZzb3VyY2V0AB1MamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50O0wACnRocmVhZE5hbWVxAH4ABEwAC3Rocm93blByb3h5dAAzTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvVGhyb3dhYmxlUHJveHk7eHAAAAAAAAAAAAABAAAABQAAAABJlgLSc3IAHmphdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eU1hcFk2FIVa3OfQAgAAeHBzcgA+b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLlRocmVhZENvbnRleHQkRW1wdHlUaHJlYWRDb250ZXh0U3RhY2sAAAAAAA
 AAAQIAAHhwc3IAHm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5MZXZlbAAAAAAAGCAaAgADSQAIaW50TGV2ZWxMAARuYW1lcQB+AARMAA1zdGFuZGFyZExldmVsdAAsTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9zcGkvU3RhbmRhcmRMZXZlbDt4cAAAAZB0AARJTkZPfnIAKm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5zcGkuU3RhbmRhcmRMZXZlbAAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABElORk90AAB0AAlzb21lLnRlc3Rwc3IALm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5tZXNzYWdlLlNpbXBsZU1lc3NhZ2WLdE0wYLeiqAIAAUwAB21lc3NhZ2VxAH4ABHhwdAADYWJjcHQABG1haW5zcgAxb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5UaHJvd2FibGVQcm94ednMMNWae6z6AgAHSQASY29tbW9uRWxlbWVudENvdW50TAAKY2F1c2VQcm94eXEAfgAIWwASZXh0ZW5kZWRTdGFja1RyYWNldAA/W0xvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovY29yZS9pbXBsL0V4dGVuZGVkU3RhY2tUcmFjZUVsZW1lbnQ7TAAQbG9jYWxpemVkTWVzc2FnZXEAfgAETAAHbWVzc2FnZXEAfgAETAAEbmFtZXEAfgAEWwARc3VwcHJlc3NlZFByb3hpZXN0ADRbTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvVGhyb3dhYmxlUHJveHk7eHAAAAAAcHVyAD9bTG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRTdGFja1RyYWNlRWxlbWVudDvKz4g
 jpcfPvAIAAHhwAAAAGnNyADxvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkV4dGVuZGVkU3RhY2tUcmFjZUVsZW1lbnTh3s+6xraQBwIAAkwADmV4dHJhQ2xhc3NJbmZvdAA2TG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvRXh0ZW5kZWRDbGFzc0luZm87TAARc3RhY2tUcmFjZUVsZW1lbnRxAH4AB3hwc3IANG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRDbGFzc0luZm8AAAAAAAAAAQIAA1oABWV4YWN0TAAIbG9jYXRpb25xAH4ABEwAB3ZlcnNpb25xAH4ABHhwAXQADXRlc3QtY2xhc3Nlcy90AAE/c3IAG2phdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudGEJxZomNt2FAgAESQAKbGluZU51bWJlckwADmRlY2xhcmluZ0NsYXNzcQB+AARMAAhmaWxlTmFtZXEAfgAETAAKbWV0aG9kTmFtZXEAfgAEeHAAAACqdAA0b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5Mb2c0akxvZ0V2ZW50VGVzdHQAFkxvZzRqTG9nRXZlbnRUZXN0LmphdmF0ACp0ZXN0SmF2YUlvU2VyaWFsaXphYmxlV2l0aFVua25vd25UaHJvd2FibGVzcQB+ACJzcQB+ACUAcQB+ACh0AAgxLjcuMF83OXNxAH4AKf////50ACRzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGx0AB1OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YXQAB2ludm9rZTBzcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKQAAADlxAH4AMnEAfgAzdAAGaW52b2tlc3EAfgAic3EAfgAlAHEA
 fgAocQB+ADBzcQB+ACkAAAArdAAoc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbHQAIURlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YXEAfgA4c3EAfgAic3EAfgAlAHEAfgAocQB+ADBzcQB+ACkAAAJedAAYamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kdAALTWV0aG9kLmphdmFxAH4AOHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnQABDQuMTJzcQB+ACkAAAAydAApb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuRnJhbWV3b3JrTWV0aG9kJDF0ABRGcmFtZXdvcmtNZXRob2QuamF2YXQAEXJ1blJlZmxlY3RpdmVDYWxsc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAAMdAAzb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMubW9kZWwuUmVmbGVjdGl2ZUNhbGxhYmxldAAXUmVmbGVjdGl2ZUNhbGxhYmxlLmphdmF0AANydW5zcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAAC90ACdvcmcuanVuaXQucnVubmVycy5tb2RlbC5GcmFtZXdvcmtNZXRob2RxAH4ASXQAEWludm9rZUV4cGxvc2l2ZWx5c3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAARdAAyb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMuc3RhdGVtZW50cy5JbnZva2VNZXRob2R0ABFJbnZva2VNZXRob2QuamF2YXQACGV2YWx1YXRlc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAFFdAAeb3JnLmp1bml0LnJ1b
 m5lcnMuUGFyZW50UnVubmVydAARUGFyZW50UnVubmVyLmphdmF0AAdydW5MZWFmc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAABOdAAob3JnLmp1bml0LnJ1bm5lcnMuQmxvY2tKVW5pdDRDbGFzc1J1bm5lcnQAG0Jsb2NrSlVuaXQ0Q2xhc3NSdW5uZXIuamF2YXQACHJ1bkNoaWxkc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAA5cQB+AGpxAH4Aa3EAfgBsc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAEidAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDNxAH4AZHEAfgBRc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAABHdAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDFxAH4AZHQACHNjaGVkdWxlc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAEgcQB+AGNxAH4AZHQAC3J1bkNoaWxkcmVuc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAA6cQB+AGNxAH4AZHQACmFjY2VzcyQwMDBzcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAAQx0ACBvcmcuanVuaXQucnVubmVycy5QYXJlbnRSdW5uZXIkMnEAfgBkcQB+AF5zcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAABp0ADBvcmcuanVuaXQuaW50ZXJuYWwucnVubmVycy5zdGF0ZW1lbnRzLlJ1bkJlZm9yZXN0AA
 9SdW5CZWZvcmVzLmphdmFxAH4AXnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAAAG3QAL29yZy5qdW5pdC5pbnRlcm5hbC5ydW5uZXJzLnN0YXRlbWVudHMuUnVuQWZ0ZXJzdAAOUnVuQWZ0ZXJzLmphdmFxAH4AXnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAABa3EAfgBjcQB+AGRxAH4AUXNxAH4AInNxAH4AJQF0AAQuY3AvcQB+AChzcQB+ACkAAABWdAA6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLmp1bml0NC5ydW5uZXIuSlVuaXQ0VGVzdFJlZmVyZW5jZXQAGEpVbml0NFRlc3RSZWZlcmVuY2UuamF2YXEAfgBRc3EAfgAic3EAfgAlAXQABC5jcC9xAH4AKHNxAH4AKQAAACZ0ADNvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuanVuaXQucnVubmVyLlRlc3RFeGVjdXRpb250ABJUZXN0RXhlY3V0aW9uLmphdmFxAH4AUXNxAH4AInNxAH4AJQF0AAQuY3AvcQB+AChzcQB+ACkAAAHLdAA2b3JnLmVjbGlwc2UuamR0LmludGVybmFsLmp1bml0LnJ1bm5lci5SZW1vdGVUZXN0UnVubmVydAAVUmVtb3RlVGVzdFJ1bm5lci5qYXZhdAAIcnVuVGVzdHNzcQB+ACJzcQB+ACUBdAAELmNwL3EAfgAoc3EAfgApAAACo3EAfgCrcQB+AKxxAH4ArXNxAH4AInNxAH4AJQF0AAQuY3AvcQB+AChzcQB+ACkAAAF+cQB+AKtxAH4ArHEAfgBRc3EAfgAic3EAfgAlAXQABC5jcC9xAH4AKHNxAH4AKQAAAMBxAH4Aq3EAfgCsdAAEbWFpbnQAFk9NRyBJJ3ZlIGJlZW4gZGVsZXRlZCFxAH4
 Au3QARW9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuTG9nNGpMb2dFdmVudFRlc3QkRGVsZXRlZEV4Y2VwdGlvbnVyADRbTG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuVGhyb3dhYmxlUHJveHk7+u0B4IWi6zkCAAB4cAAAAAA=";
+
+        //final String base64_v_2_5 = "rO0ABXNyAD5vcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnQkTG9nRXZlbnRQcm94eZztD11w2ioWAgANWgAMaXNFbmRPZkJhdGNoWgASaXNMb2NhdGlvblJlcXVpcmVkSgAKdGltZU1pbGxpc0wACmNvbnRleHRNYXB0AA9MamF2YS91dGlsL01hcDtMAAxjb250ZXh0U3RhY2t0ADVMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL1RocmVhZENvbnRleHQkQ29udGV4dFN0YWNrO0wABWxldmVsdAAgTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9MZXZlbDtMAApsb2dnZXJGUUNOdAASTGphdmEvbGFuZy9TdHJpbmc7TAAKbG9nZ2VyTmFtZXEAfgAETAAGbWFya2VydAAhTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9NYXJrZXI7TAAHbWVzc2FnZXQAKkxvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovbWVzc2FnZS9NZXNzYWdlO0wABnNvdXJjZXQAHUxqYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQ7TAAKdGhyZWFkTmFtZXEAfgAETAALdGhyb3duUHJveHl0ADNMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL2NvcmUvaW1wbC9UaHJvd2FibGVQcm94eTt4cAAAAAAAAEmWAtJzcgAeamF2YS51dGlsLkNvbGxlY3Rpb25zJEVtcHR5TWFwWTYUhVrc59ACAAB4cHNyAD5vcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouVGhyZWFkQ29udGV4dCRFbXB0eVRocmVhZENvbnRleHRTdGFjawAAAAAAAAABAgAAeHBzcgAeb3JnLmFwYWNoZS5sb2dnaW5nLmxvZz
 RqLkxldmVsAAAAAAAYIBoCAANJAAhpbnRMZXZlbEwABG5hbWVxAH4ABEwADXN0YW5kYXJkTGV2ZWx0ACxMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL3NwaS9TdGFuZGFyZExldmVsO3hwAAABkHQABElORk9+cgAqb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLnNwaS5TdGFuZGFyZExldmVsAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAESU5GT3QAAHQACXNvbWUudGVzdHBzcgAub3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLm1lc3NhZ2UuU2ltcGxlTWVzc2FnZYt0TTBgt6KoAgABTAAHbWVzc2FnZXEAfgAEeHB0AANhYmNwdAAEbWFpbnNyADFvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLlRocm93YWJsZVByb3h52cww1Zp7rPoCAAdJABJjb21tb25FbGVtZW50Q291bnRMAApjYXVzZVByb3h5cQB+AAhbABJleHRlbmRlZFN0YWNrVHJhY2V0AD9bTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvRXh0ZW5kZWRTdGFja1RyYWNlRWxlbWVudDtMABBsb2NhbGl6ZWRNZXNzYWdlcQB+AARMAAdtZXNzYWdlcQB+AARMAARuYW1lcQB+AARbABFzdXBwcmVzc2VkUHJveGllc3QANFtMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL2NvcmUvaW1wbC9UaHJvd2FibGVQcm94eTt4cAAAAABwdXIAP1tMb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5FeHRlbmRlZFN0YWNrVHJhY2VFbGVtZW50O8rPiCOlx8+8AgAAeHAAAAAac3IAPG9yZy5hcGFjaGUubG9nZ2l
 uZy5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRTdGFja1RyYWNlRWxlbWVudOHez7rGtpAHAgACTAAOZXh0cmFDbGFzc0luZm90ADZMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL2NvcmUvaW1wbC9FeHRlbmRlZENsYXNzSW5mbztMABFzdGFja1RyYWNlRWxlbWVudHEAfgAHeHBzcgA0b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5FeHRlbmRlZENsYXNzSW5mbwAAAAAAAAABAgADWgAFZXhhY3RMAAhsb2NhdGlvbnEAfgAETAAHdmVyc2lvbnEAfgAEeHABdAANdGVzdC1jbGFzc2VzL3QAAT9zcgAbamF2YS5sYW5nLlN0YWNrVHJhY2VFbGVtZW50YQnFmiY23YUCAARJAApsaW5lTnVtYmVyTAAOZGVjbGFyaW5nQ2xhc3NxAH4ABEwACGZpbGVOYW1lcQB+AARMAAptZXRob2ROYW1lcQB+AAR4cAAAAJh0ADRvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnRUZXN0dAAWTG9nNGpMb2dFdmVudFRlc3QuamF2YXQAKnRlc3RKYXZhSW9TZXJpYWxpemFibGVXaXRoVW5rbm93blRocm93YWJsZXNxAH4AInNxAH4AJQBxAH4AKHQACDEuNy4wXzU1c3EAfgAp/////nQAJHN1bi5yZWZsZWN0Lk5hdGl2ZU1ldGhvZEFjY2Vzc29ySW1wbHB0AAdpbnZva2Uwc3EAfgAic3EAfgAlAHEAfgAocQB+ADBzcQB+ACn/////cQB+ADJwdAAGaW52b2tlc3EAfgAic3EAfgAlAHEAfgAocQB+ADBzcQB+ACn/////dAAoc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbHBxAH4AN3Nx
 AH4AInNxAH4AJQBxAH4AKHEAfgAwc3EAfgAp/////3QAGGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZHBxAH4AN3NxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAL3QAKW9yZy5qdW5pdC5ydW5uZXJzLm1vZGVsLkZyYW1ld29ya01ldGhvZCQxdAAURnJhbWV3b3JrTWV0aG9kLmphdmF0ABFydW5SZWZsZWN0aXZlQ2FsbHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAADHQAM29yZy5qdW5pdC5pbnRlcm5hbC5ydW5uZXJzLm1vZGVsLlJlZmxlY3RpdmVDYWxsYWJsZXQAF1JlZmxlY3RpdmVDYWxsYWJsZS5qYXZhdAADcnVuc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTEuamFycQB+AChzcQB+ACkAAAAsdAAnb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuRnJhbWV3b3JrTWV0aG9kcQB+AEV0ABFpbnZva2VFeHBsb3NpdmVseXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAEXQAMm9yZy5qdW5pdC5pbnRlcm5hbC5ydW5uZXJzLnN0YXRlbWVudHMuSW52b2tlTWV0aG9kdAARSW52b2tlTWV0aG9kLmphdmF0AAhldmFsdWF0ZXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAABD3QAHm9yZy5qdW5pdC5ydW5uZXJzLlBhcmVudFJ1bm5lcnQAEVBhcmVudFJ1bm5lci5qYXZhdAAHcnVuTGVhZnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAARnQAKG9yZy5qdW5pdC5ydW5uZXJzLkJsb2NrS
 lVuaXQ0Q2xhc3NSdW5uZXJ0ABtCbG9ja0pVbml0NENsYXNzUnVubmVyLmphdmF0AAhydW5DaGlsZHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAMnEAfgBmcQB+AGdxAH4AaHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAA7nQAIG9yZy5qdW5pdC5ydW5uZXJzLlBhcmVudFJ1bm5lciQzcQB+AGBxAH4ATXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAAP3QAIG9yZy5qdW5pdC5ydW5uZXJzLlBhcmVudFJ1bm5lciQxcQB+AGB0AAhzY2hlZHVsZXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAA7HEAfgBfcQB+AGB0AAtydW5DaGlsZHJlbnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjExLmphcnEAfgAoc3EAfgApAAAANXEAfgBfcQB+AGB0AAphY2Nlc3MkMDAwc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTEuamFycQB+AChzcQB+ACkAAADldAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDJxAH4AYHEAfgBac3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTEuamFycQB+AChzcQB+ACkAAAAadAAwb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMuc3RhdGVtZW50cy5SdW5CZWZvcmVzdAAPUnVuQmVmb3Jlcy5qYXZhcQB+AFpzcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMS5qYXJxAH4AKHNxAH4AKQAAABt0AC9vcmcuanVuaXQuaW50ZXJuYWwucnVubmVycy5zdGF0ZW1lbnRzLlJ1bkFmdGVyc3QADl
 J1bkFmdGVycy5qYXZhcQB+AFpzcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMS5qYXJxAH4AKHNxAH4AKQAAATVxAH4AX3EAfgBgcQB+AE1zcQB+ACJzcQB+ACUBdAAELmNwL3EAfgAoc3EAfgApAAAAMnQAOm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5qdW5pdDQucnVubmVyLkpVbml0NFRlc3RSZWZlcmVuY2V0ABhKVW5pdDRUZXN0UmVmZXJlbmNlLmphdmFxAH4ATXNxAH4AInNxAH4AJQF0AAQuY3AvcQB+AChzcQB+ACkAAAAmdAAzb3JnLmVjbGlwc2UuamR0LmludGVybmFsLmp1bml0LnJ1bm5lci5UZXN0RXhlY3V0aW9udAASVGVzdEV4ZWN1dGlvbi5qYXZhcQB+AE1zcQB+ACJzcQB+ACUBdAAELmNwL3EAfgAoc3EAfgApAAAB03QANm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5qdW5pdC5ydW5uZXIuUmVtb3RlVGVzdFJ1bm5lcnQAFVJlbW90ZVRlc3RSdW5uZXIuamF2YXQACHJ1blRlc3Rzc3EAfgAic3EAfgAlAXQABC5jcC9xAH4AKHNxAH4AKQAAAqtxAH4Ap3EAfgCocQB+AKlzcQB+ACJzcQB+ACUBdAAELmNwL3EAfgAoc3EAfgApAAABhnEAfgCncQB+AKhxAH4ATXNxAH4AInNxAH4AJQF0AAQuY3AvcQB+AChzcQB+ACkAAADFcQB+AKdxAH4AqHQABG1haW50ABZPTUcgSSd2ZSBiZWVuIGRlbGV0ZWQhcQB+ALd0AEVvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnRUZXN0JERlbGV0ZWRFeGNlcHRpb251cgA0W0xvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLlRocm9
 3YWJsZVByb3h5O/rtAeCFous5AgAAeHAAAAAA";
+        final String base64_v_2_6 = "rO0ABXNyAD5vcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnQkTG9nRXZlbnRQcm94eYgtmn+yXsP9AgAPWgAMaXNFbmRPZkJhdGNoWgASaXNMb2NhdGlvblJlcXVpcmVkSgAIdGhyZWFkSWRJAA50aHJlYWRQcmlvcml0eUoACnRpbWVNaWxsaXNMAApjb250ZXh0TWFwdAAPTGphdmEvdXRpbC9NYXA7TAAMY29udGV4dFN0YWNrdAA1TG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9UaHJlYWRDb250ZXh0JENvbnRleHRTdGFjaztMAAVsZXZlbHQAIExvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovTGV2ZWw7TAAKbG9nZ2VyRlFDTnQAEkxqYXZhL2xhbmcvU3RyaW5nO0wACmxvZ2dlck5hbWVxAH4ABEwABm1hcmtlcnQAIUxvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovTWFya2VyO0wAB21lc3NhZ2V0ACpMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL21lc3NhZ2UvTWVzc2FnZTtMAAZzb3VyY2V0AB1MamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50O0wACnRocmVhZE5hbWVxAH4ABEwAC3Rocm93blByb3h5dAAzTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvVGhyb3dhYmxlUHJveHk7eHAAAAAAAAAAAAABAAAABQAAAABJlgLSc3IAHmphdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eU1hcFk2FIVa3OfQAgAAeHBzcgA+b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLlRocmVhZENvbnRleHQkRW1wdHlUaHJlYWRDb250ZXh0U3RhY2sA
 AAAAAAAAAQIAAHhwc3IAHm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5MZXZlbAAAAAAAGCAaAgADSQAIaW50TGV2ZWxMAARuYW1lcQB+AARMAA1zdGFuZGFyZExldmVsdAAsTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9zcGkvU3RhbmRhcmRMZXZlbDt4cAAAAZB0AARJTkZPfnIAKm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5zcGkuU3RhbmRhcmRMZXZlbAAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABElORk90AAB0AAlzb21lLnRlc3Rwc3IALm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5tZXNzYWdlLlNpbXBsZU1lc3NhZ2WLdE0wYLeiqAMAAUwAB21lc3NhZ2VxAH4ABHhwdAADYWJjcQB+ABp4cHQABG1haW5zcgAxb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5UaHJvd2FibGVQcm94ednMMNWae6z6AgAHSQASY29tbW9uRWxlbWVudENvdW50TAAKY2F1c2VQcm94eXEAfgAIWwASZXh0ZW5kZWRTdGFja1RyYWNldAA/W0xvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovY29yZS9pbXBsL0V4dGVuZGVkU3RhY2tUcmFjZUVsZW1lbnQ7TAAQbG9jYWxpemVkTWVzc2FnZXEAfgAETAAHbWVzc2FnZXEAfgAETAAEbmFtZXEAfgAEWwARc3VwcHJlc3NlZFByb3hpZXN0ADRbTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvVGhyb3dhYmxlUHJveHk7eHAAAAAAcHVyAD9bTG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRTdGFja1RyYWNlR
 WxlbWVudDvKz4gjpcfPvAIAAHhwAAAAHXNyADxvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkV4dGVuZGVkU3RhY2tUcmFjZUVsZW1lbnTh3s+6xraQBwIAAkwADmV4dHJhQ2xhc3NJbmZvdAA2TG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvRXh0ZW5kZWRDbGFzc0luZm87TAARc3RhY2tUcmFjZUVsZW1lbnRxAH4AB3hwc3IANG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRDbGFzc0luZm8AAAAAAAAAAQIAA1oABWV4YWN0TAAIbG9jYXRpb25xAH4ABEwAB3ZlcnNpb25xAH4ABHhwAXQADXRlc3QtY2xhc3Nlcy90AAE/c3IAG2phdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudGEJxZomNt2FAgAESQAKbGluZU51bWJlckwADmRlY2xhcmluZ0NsYXNzcQB+AARMAAhmaWxlTmFtZXEAfgAETAAKbWV0aG9kTmFtZXEAfgAEeHAAAACqdAA0b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5Mb2c0akxvZ0V2ZW50VGVzdHQAFkxvZzRqTG9nRXZlbnRUZXN0LmphdmF0ACp0ZXN0SmF2YUlvU2VyaWFsaXphYmxlV2l0aFVua25vd25UaHJvd2FibGVzcQB+ACJzcQB+ACUAcQB+ACh0AAgxLjcuMF81NXNxAH4AKf////50ACRzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGx0AB1OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YXQAB2ludm9rZTBzcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKQAAADlxAH4AMnEAfgAzdAAGaW52b2tlc3EAfg
 Aic3EAfgAlAHEAfgAocQB+ADBzcQB+ACkAAAArdAAoc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbHQAIURlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YXEAfgA4c3EAfgAic3EAfgAlAHEAfgAocQB+ADBzcQB+ACkAAAJedAAYamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kdAALTWV0aG9kLmphdmFxAH4AOHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnQABDQuMTJzcQB+ACkAAAAydAApb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuRnJhbWV3b3JrTWV0aG9kJDF0ABRGcmFtZXdvcmtNZXRob2QuamF2YXQAEXJ1blJlZmxlY3RpdmVDYWxsc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAAMdAAzb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMubW9kZWwuUmVmbGVjdGl2ZUNhbGxhYmxldAAXUmVmbGVjdGl2ZUNhbGxhYmxlLmphdmF0AANydW5zcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAAC90ACdvcmcuanVuaXQucnVubmVycy5tb2RlbC5GcmFtZXdvcmtNZXRob2RxAH4ASXQAEWludm9rZUV4cGxvc2l2ZWx5c3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAARdAAyb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMuc3RhdGVtZW50cy5JbnZva2VNZXRob2R0ABFJbnZva2VNZXRob2QuamF2YXQACGV2YWx1YXRlc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAFFdAAeb3J
 nLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVydAARUGFyZW50UnVubmVyLmphdmF0AAdydW5MZWFmc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAABOdAAob3JnLmp1bml0LnJ1bm5lcnMuQmxvY2tKVW5pdDRDbGFzc1J1bm5lcnQAG0Jsb2NrSlVuaXQ0Q2xhc3NSdW5uZXIuamF2YXQACHJ1bkNoaWxkc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAA5cQB+AGpxAH4Aa3EAfgBsc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAEidAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDNxAH4AZHEAfgBRc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAABHdAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDFxAH4AZHQACHNjaGVkdWxlc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAEgcQB+AGNxAH4AZHQAC3J1bkNoaWxkcmVuc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAA6cQB+AGNxAH4AZHQACmFjY2VzcyQwMDBzcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAAQx0ACBvcmcuanVuaXQucnVubmVycy5QYXJlbnRSdW5uZXIkMnEAfgBkcQB+AF5zcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAABp0ADBvcmcuanVuaXQuaW50ZXJuYWwucnVubmVycy5zdGF0ZW1lbnRzLlJ1
 bkJlZm9yZXN0AA9SdW5CZWZvcmVzLmphdmFxAH4AXnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAAAG3QAL29yZy5qdW5pdC5pbnRlcm5hbC5ydW5uZXJzLnN0YXRlbWVudHMuUnVuQWZ0ZXJzdAAOUnVuQWZ0ZXJzLmphdmFxAH4AXnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAABa3EAfgBjcQB+AGRxAH4AUXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAAAiXQAGm9yZy5qdW5pdC5ydW5uZXIuSlVuaXRDb3JldAAOSlVuaXRDb3JlLmphdmFxAH4AUXNxAH4AInNxAH4AJQF0AAxqdW5pdC1ydC5qYXJxAH4AKHNxAH4AKQAAAEV0AChjb20uaW50ZWxsaWouanVuaXQ0LkpVbml0NElkZWFUZXN0UnVubmVydAAZSlVuaXQ0SWRlYVRlc3RSdW5uZXIuamF2YXQAE3N0YXJ0UnVubmVyV2l0aEFyZ3NzcQB+ACJzcQB+ACUBdAAManVuaXQtcnQuamFycQB+AChzcQB+ACkAAADqdAAsY29tLmludGVsbGlqLnJ0LmV4ZWN1dGlvbi5qdW5pdC5KVW5pdFN0YXJ0ZXJ0ABFKVW5pdFN0YXJ0ZXIuamF2YXQAFnByZXBhcmVTdHJlYW1zQW5kU3RhcnRzcQB+ACJzcQB+ACUBdAAManVuaXQtcnQuamFycQB+AChzcQB+ACkAAABKcQB+AKxxAH4ArXQABG1haW5zcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKf////5xAH4AMnEAfgAzcQB+ADRzcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKQAAADlxAH4AMnEAfgAzcQB+ADhzcQB+ACJzcQB+ACUAcQB+A
 ChxAH4AMHNxAH4AKQAAACtxAH4APHEAfgA9cQB+ADhzcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKQAAAl5xAH4AQXEAfgBCcQB+ADhzcQB+ACJzcQB+ACUBdAALaWRlYV9ydC5qYXJxAH4AKHNxAH4AKQAAAJB0AC1jb20uaW50ZWxsaWoucnQuZXhlY3V0aW9uLmFwcGxpY2F0aW9uLkFwcE1haW50AAxBcHBNYWluLmphdmFxAH4As3QAFk9NRyBJJ3ZlIGJlZW4gZGVsZXRlZCFxAH4AxnQARW9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuTG9nNGpMb2dFdmVudFRlc3QkRGVsZXRlZEV4Y2VwdGlvbnVyADRbTG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuVGhyb3dhYmxlUHJveHk7+u0B4IWi6zkCAAB4cAAAAAA=";
+        final String base64 = "rO0ABXNyAD5vcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkxvZzRqTG9nRXZlbnQkTG9nRXZlbnRQcm94eYgtmn+yXsP9AgAPWgAMaXNFbmRPZkJhdGNoWgASaXNMb2NhdGlvblJlcXVpcmVkSgAIdGhyZWFkSWRJAA50aHJlYWRQcmlvcml0eUoACnRpbWVNaWxsaXNMAApjb250ZXh0TWFwdAAPTGphdmEvdXRpbC9NYXA7TAAMY29udGV4dFN0YWNrdAA1TG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9UaHJlYWRDb250ZXh0JENvbnRleHRTdGFjaztMAAVsZXZlbHQAIExvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovTGV2ZWw7TAAKbG9nZ2VyRlFDTnQAEkxqYXZhL2xhbmcvU3RyaW5nO0wACmxvZ2dlck5hbWVxAH4ABEwABm1hcmtlcnQAIUxvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovTWFya2VyO0wAB21lc3NhZ2V0ACpMb3JnL2FwYWNoZS9sb2dnaW5nL2xvZzRqL21lc3NhZ2UvTWVzc2FnZTtMAAZzb3VyY2V0AB1MamF2YS9sYW5nL1N0YWNrVHJhY2VFbGVtZW50O0wACnRocmVhZE5hbWVxAH4ABEwAC3Rocm93blByb3h5dAAzTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvVGhyb3dhYmxlUHJveHk7eHAAAAAAAAAAAAABAAAABQAAAABJlgLSc3IAHmphdmEudXRpbC5Db2xsZWN0aW9ucyRFbXB0eU1hcFk2FIVa3OfQAgAAeHBzcgA+b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLlRocmVhZENvbnRleHQkRW1wdHlUaHJlYWRDb250ZXh0U3RhY2sAAAAAAA
 AAAQIAAHhwc3IAHm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5MZXZlbAAAAAAAGCAaAgADSQAIaW50TGV2ZWxMAARuYW1lcQB+AARMAA1zdGFuZGFyZExldmVsdAAsTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9zcGkvU3RhbmRhcmRMZXZlbDt4cAAAAZB0AARJTkZPfnIAKm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5zcGkuU3RhbmRhcmRMZXZlbAAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABElORk90AAB0AAlzb21lLnRlc3Rwc3IALm9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5tZXNzYWdlLlNpbXBsZU1lc3NhZ2WLdE0wYLeiqAMAAUwAB21lc3NhZ2VxAH4ABHhwdAADYWJjcQB+ABp4cHQABG1haW5zcgAxb3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5UaHJvd2FibGVQcm94ednMMNWae6z6AgAHSQASY29tbW9uRWxlbWVudENvdW50TAAKY2F1c2VQcm94eXEAfgAIWwASZXh0ZW5kZWRTdGFja1RyYWNldAA/W0xvcmcvYXBhY2hlL2xvZ2dpbmcvbG9nNGovY29yZS9pbXBsL0V4dGVuZGVkU3RhY2tUcmFjZUVsZW1lbnQ7TAAQbG9jYWxpemVkTWVzc2FnZXEAfgAETAAHbWVzc2FnZXEAfgAETAAEbmFtZXEAfgAEWwARc3VwcHJlc3NlZFByb3hpZXN0ADRbTG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvVGhyb3dhYmxlUHJveHk7eHAAAAAAcHVyAD9bTG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRTdGFja1RyYWNlRWxlbWV
 udDvKz4gjpcfPvAIAAHhwAAAAHXNyADxvcmcuYXBhY2hlLmxvZ2dpbmcubG9nNGouY29yZS5pbXBsLkV4dGVuZGVkU3RhY2tUcmFjZUVsZW1lbnTh3s+6xraQBwIAAkwADmV4dHJhQ2xhc3NJbmZvdAA2TG9yZy9hcGFjaGUvbG9nZ2luZy9sb2c0ai9jb3JlL2ltcGwvRXh0ZW5kZWRDbGFzc0luZm87TAARc3RhY2tUcmFjZUVsZW1lbnRxAH4AB3hwc3IANG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuRXh0ZW5kZWRDbGFzc0luZm8AAAAAAAAAAQIAA1oABWV4YWN0TAAIbG9jYXRpb25xAH4ABEwAB3ZlcnNpb25xAH4ABHhwAXQADXRlc3QtY2xhc3Nlcy90AAE/c3IAG2phdmEubGFuZy5TdGFja1RyYWNlRWxlbWVudGEJxZomNt2FAgAESQAKbGluZU51bWJlckwADmRlY2xhcmluZ0NsYXNzcQB+AARMAAhmaWxlTmFtZXEAfgAETAAKbWV0aG9kTmFtZXEAfgAEeHAAAACqdAA0b3JnLmFwYWNoZS5sb2dnaW5nLmxvZzRqLmNvcmUuaW1wbC5Mb2c0akxvZ0V2ZW50VGVzdHQAFkxvZzRqTG9nRXZlbnRUZXN0LmphdmF0ACp0ZXN0SmF2YUlvU2VyaWFsaXphYmxlV2l0aFVua25vd25UaHJvd2FibGVzcQB+ACJzcQB+ACUAcQB+ACh0AAgxLjcuMF81NXNxAH4AKf////50ACRzdW4ucmVmbGVjdC5OYXRpdmVNZXRob2RBY2Nlc3NvckltcGx0AB1OYXRpdmVNZXRob2RBY2Nlc3NvckltcGwuamF2YXQAB2ludm9rZTBzcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKQAAADlxAH4AMnEAfgAzdAAGaW52b2tlc3EAfgAic3EA
 fgAlAHEAfgAocQB+ADBzcQB+ACkAAAArdAAoc3VuLnJlZmxlY3QuRGVsZWdhdGluZ01ldGhvZEFjY2Vzc29ySW1wbHQAIURlbGVnYXRpbmdNZXRob2RBY2Nlc3NvckltcGwuamF2YXEAfgA4c3EAfgAic3EAfgAlAHEAfgAocQB+ADBzcQB+ACkAAAJedAAYamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kdAALTWV0aG9kLmphdmFxAH4AOHNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnQABDQuMTJzcQB+ACkAAAAydAApb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwuRnJhbWV3b3JrTWV0aG9kJDF0ABRGcmFtZXdvcmtNZXRob2QuamF2YXQAEXJ1blJlZmxlY3RpdmVDYWxsc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAAMdAAzb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMubW9kZWwuUmVmbGVjdGl2ZUNhbGxhYmxldAAXUmVmbGVjdGl2ZUNhbGxhYmxlLmphdmF0AANydW5zcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAAC90ACdvcmcuanVuaXQucnVubmVycy5tb2RlbC5GcmFtZXdvcmtNZXRob2RxAH4ASXQAEWludm9rZUV4cGxvc2l2ZWx5c3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAARdAAyb3JnLmp1bml0LmludGVybmFsLnJ1bm5lcnMuc3RhdGVtZW50cy5JbnZva2VNZXRob2R0ABFJbnZva2VNZXRob2QuamF2YXQACGV2YWx1YXRlc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAFFdAAeb3JnLmp1b
 ml0LnJ1bm5lcnMuUGFyZW50UnVubmVydAARUGFyZW50UnVubmVyLmphdmF0AAdydW5MZWFmc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAABOdAAob3JnLmp1bml0LnJ1bm5lcnMuQmxvY2tKVW5pdDRDbGFzc1J1bm5lcnQAG0Jsb2NrSlVuaXQ0Q2xhc3NSdW5uZXIuamF2YXQACHJ1bkNoaWxkc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAA5cQB+AGpxAH4Aa3EAfgBsc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAEidAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDNxAH4AZHEAfgBRc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAABHdAAgb3JnLmp1bml0LnJ1bm5lcnMuUGFyZW50UnVubmVyJDFxAH4AZHQACHNjaGVkdWxlc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAEgcQB+AGNxAH4AZHQAC3J1bkNoaWxkcmVuc3EAfgAic3EAfgAlAXQADmp1bml0LTQuMTIuamFycQB+AEZzcQB+ACkAAAA6cQB+AGNxAH4AZHQACmFjY2VzcyQwMDBzcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAAQx0ACBvcmcuanVuaXQucnVubmVycy5QYXJlbnRSdW5uZXIkMnEAfgBkcQB+AF5zcQB+ACJzcQB+ACUBdAAOanVuaXQtNC4xMi5qYXJxAH4ARnNxAH4AKQAAABp0ADBvcmcuanVuaXQuaW50ZXJuYWwucnVubmVycy5zdGF0ZW1lbnRzLlJ1bkJlZm
 9yZXN0AA9SdW5CZWZvcmVzLmphdmFxAH4AXnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAAAG3QAL29yZy5qdW5pdC5pbnRlcm5hbC5ydW5uZXJzLnN0YXRlbWVudHMuUnVuQWZ0ZXJzdAAOUnVuQWZ0ZXJzLmphdmFxAH4AXnNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAABa3EAfgBjcQB+AGRxAH4AUXNxAH4AInNxAH4AJQF0AA5qdW5pdC00LjEyLmphcnEAfgBGc3EAfgApAAAAiXQAGm9yZy5qdW5pdC5ydW5uZXIuSlVuaXRDb3JldAAOSlVuaXRDb3JlLmphdmFxAH4AUXNxAH4AInNxAH4AJQF0AAxqdW5pdC1ydC5qYXJxAH4AKHNxAH4AKQAAAEV0AChjb20uaW50ZWxsaWouanVuaXQ0LkpVbml0NElkZWFUZXN0UnVubmVydAAZSlVuaXQ0SWRlYVRlc3RSdW5uZXIuamF2YXQAE3N0YXJ0UnVubmVyV2l0aEFyZ3NzcQB+ACJzcQB+ACUBdAAManVuaXQtcnQuamFycQB+AChzcQB+ACkAAADqdAAsY29tLmludGVsbGlqLnJ0LmV4ZWN1dGlvbi5qdW5pdC5KVW5pdFN0YXJ0ZXJ0ABFKVW5pdFN0YXJ0ZXIuamF2YXQAFnByZXBhcmVTdHJlYW1zQW5kU3RhcnRzcQB+ACJzcQB+ACUBdAAManVuaXQtcnQuamFycQB+AChzcQB+ACkAAABKcQB+AKxxAH4ArXQABG1haW5zcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKf////5xAH4AMnEAfgAzcQB+ADRzcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKQAAADlxAH4AMnEAfgAzcQB+ADhzcQB+ACJzcQB+ACUAcQB+AChxAH4
 AMHNxAH4AKQAAACtxAH4APHEAfgA9cQB+ADhzcQB+ACJzcQB+ACUAcQB+AChxAH4AMHNxAH4AKQAAAl5xAH4AQXEAfgBCcQB+ADhzcQB+ACJzcQB+ACUBdAALaWRlYV9ydC5qYXJxAH4AKHNxAH4AKQAAAJB0AC1jb20uaW50ZWxsaWoucnQuZXhlY3V0aW9uLmFwcGxpY2F0aW9uLkFwcE1haW50AAxBcHBNYWluLmphdmFxAH4As3QAFk9NRyBJJ3ZlIGJlZW4gZGVsZXRlZCFxAH4AxnQARW9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuTG9nNGpMb2dFdmVudFRlc3QkRGVsZXRlZEV4Y2VwdGlvbnVyADRbTG9yZy5hcGFjaGUubG9nZ2luZy5sb2c0ai5jb3JlLmltcGwuVGhyb3dhYmxlUHJveHk7+u0B4IWi6zkCAAB4cAAAAAA=";
 
         final byte[] binaryDecoded = DatatypeConverter.parseBase64Binary(base64);
         final Log4jLogEvent evt2 = deserialize(binaryDecoded);
@@ -203,13 +204,13 @@ public class Log4jLogEventTest {
         final LogEvent evt = Log4jLogEvent.newBuilder().build();
         assertEquals(FixedTimeClock.FIXED_TIME, evt.getTimeMillis());
     }
-    
+
     @Test
     public void testInitiallyDummyNanoClock() {
         assertTrue(Log4jLogEvent.getNanoClock() instanceof DummyNanoClock);
         assertEquals("initial dummy nanotime", 0, Log4jLogEvent.getNanoClock().nanoTime());
     }
-    
+
     @Test
     public void testNanoTimeGeneratedByNanoClock() {
         Log4jLogEvent.setNanoClock(new DummyNanoClock(123));
@@ -232,7 +233,7 @@ public class Log4jLogEventTest {
         assertEquals("12-arg factory method", expected, Log4jLogEvent.createEvent("l", null, "a", null, null, null,
                 null, null, null, null, null, 0).getNanoTime());
     }
-    
+
     @Test
     public void testBuilderCorrectlyCopiesAllEventAttributes() {
         final Map<String, String> contextMap = new HashMap<>();
@@ -261,7 +262,7 @@ public class Log4jLogEventTest {
                 .setThrown(exception) //
                 .setTimeMillis(987654321L)
                 .build();
-        
+
         assertSame(contextMap, event.getContextMap());
         assertSame(contextStack, event.getContextStack());
         assertEquals(true, event.isEndOfBatch());
@@ -276,12 +277,12 @@ public class Log4jLogEventTest {
         assertSame(threadName, event.getThreadName());
         assertSame(exception, event.getThrown());
         assertEquals(987654321L, event.getTimeMillis());
-        
+
         LogEvent event2 = new Log4jLogEvent.Builder(event).build();
         assertEquals("copy constructor builder", event2, event);
         assertEquals("same hashCode", event2.hashCode(), event.hashCode());
     }
-    
+
     @Test
     public void testEquals() {
         final Map<String, String> contextMap = new HashMap<>();
@@ -311,7 +312,7 @@ public class Log4jLogEventTest {
                 .setThrown(exception) //
                 .setTimeMillis(987654321L)
                 .build();
-        
+
         assertSame(contextMap, event.getContextMap());
         assertSame(contextStack, event.getContextStack());
         assertEquals(true, event.isEndOfBatch());
@@ -326,11 +327,11 @@ public class Log4jLogEventTest {
         assertSame(threadName, event.getThreadName());
         assertSame(exception, event.getThrown());
         assertEquals(987654321L, event.getTimeMillis());
-        
+
         final LogEvent event2 = builder(event).build();
         assertEquals("copy constructor builder", event2, event);
         assertEquals("same hashCode", event2.hashCode(), event.hashCode());
-        
+
         assertSame(contextMap, event2.getContextMap());
         assertSame(contextStack, event2.getContextStack());
         assertEquals(true, event2.isEndOfBatch());
@@ -345,7 +346,7 @@ public class Log4jLogEventTest {
         assertSame(threadName, event2.getThreadName());
         assertSame(exception, event2.getThrown());
         assertEquals(987654321L, event2.getTimeMillis());
-        
+
         final Map<String, String> differentMap = Collections.emptyMap();
         different("different contextMap", builder(event).setContextMap(differentMap), event);
         different("null contextMap", builder(event).setContextMap(null), event);
@@ -387,18 +388,18 @@ public class Log4jLogEventTest {
         final StackTraceElement stack2 = new StackTraceElement("XXX", "YYY", "file", 123);
         different("different source", builder(event).setSource(stack2), event);
         different("null source", builder(event).setSource(null), event);
-        
+
         different("different threadname", builder(event).setThreadName("different"), event);
         different("null threadname", builder(event).setThreadName(null), event);
-        
+
         different("different exception", builder(event).setThrown(new Error("Boo!")), event);
         different("null exception", builder(event).setThrown(null), event);
     }
-    
+
     private static Log4jLogEvent.Builder builder(LogEvent event) {
         return new Log4jLogEvent.Builder(event);
     }
-    
+
     private void different(String reason, Log4jLogEvent.Builder builder, LogEvent event) {
         final LogEvent other = builder.build();
         assertNotEquals(reason, other, event);


[04/13] logging-log4j2 git commit: LOG4J2-1326 add methods to AbstractLogger that explicitly accept a CharSequence message

Posted by rp...@apache.org.
LOG4J2-1326 add methods to AbstractLogger that explicitly accept a CharSequence message


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

Branch: refs/heads/master
Commit: 9107a0434f17b6f86fc0c91c744b342d8b1f15d5
Parents: 348e522
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:11:29 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:11:29 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/spi/AbstractLogger.java       | 155 +++++++++++++++++++
 1 file changed, 155 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/9107a043/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 9edd513..8707595 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
@@ -247,6 +247,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void debug(final Marker marker, final CharSequence message) {
+        logIfEnabled(FQCN, Level.DEBUG, marker, message, null);
+    }
+
+    @Override
+    public void debug(final Marker marker, final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.DEBUG, marker, message, t);
+    }
+
+    @Override
     public void debug(final Marker marker, final Message msg) {
         logIfEnabled(FQCN, Level.DEBUG, marker, msg, null);
     }
@@ -292,6 +302,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void debug(final CharSequence message) {
+        logIfEnabled(FQCN, Level.DEBUG, null, message, null);
+    }
+
+    @Override
+    public void debug(final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.DEBUG, null, message, t);
+    }
+
+    @Override
     public void debug(final Object message) {
         logIfEnabled(FQCN, Level.DEBUG, null, message, null);
     }
@@ -649,6 +669,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void error(final Marker marker, final CharSequence message) {
+        logIfEnabled(FQCN, Level.ERROR, marker, message, null);
+    }
+
+    @Override
+    public void error(final Marker marker, final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.ERROR, marker, message, t);
+    }
+
+    @Override
     public void error(final Marker marker, final Object message) {
         logIfEnabled(FQCN, Level.ERROR, marker, message, null);
     }
@@ -684,6 +714,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void error(final CharSequence message) {
+        logIfEnabled(FQCN, Level.ERROR, null, message, null);
+    }
+
+    @Override
+    public void error(final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.ERROR, null, message, t);
+    }
+
+    @Override
     public void error(final Object message) {
         logIfEnabled(FQCN, Level.ERROR, null, message, null);
     }
@@ -936,6 +976,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void fatal(final Marker marker, final CharSequence message) {
+        logIfEnabled(FQCN, Level.FATAL, marker, message, null);
+    }
+
+    @Override
+    public void fatal(final Marker marker, final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.FATAL, marker, message, t);
+    }
+
+    @Override
     public void fatal(final Marker marker, final Object message) {
         logIfEnabled(FQCN, Level.FATAL, marker, message, null);
     }
@@ -971,6 +1021,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void fatal(final CharSequence message) {
+        logIfEnabled(FQCN, Level.FATAL, null, message, null);
+    }
+
+    @Override
+    public void fatal(final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.FATAL, null, message, t);
+    }
+
+    @Override
     public void fatal(final Object message) {
         logIfEnabled(FQCN, Level.FATAL, null, message, null);
     }
@@ -1182,6 +1242,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void info(final Marker marker, final CharSequence message) {
+        logIfEnabled(FQCN, Level.INFO, marker, message, null);
+    }
+
+    @Override
+    public void info(final Marker marker, final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.INFO, marker, message, t);
+    }
+
+    @Override
     public void info(final Marker marker, final Object message) {
         logIfEnabled(FQCN, Level.INFO, marker, message, null);
     }
@@ -1217,6 +1287,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void info(final CharSequence message) {
+        logIfEnabled(FQCN, Level.INFO, null, message, null);
+    }
+
+    @Override
+    public void info(final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.INFO, null, message, t);
+    }
+
+    @Override
     public void info(final Object message) {
         logIfEnabled(FQCN, Level.INFO, null, message, null);
     }
@@ -1490,6 +1570,18 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void log(final Level level, final Marker marker, final CharSequence message) {
+        logIfEnabled(FQCN, level, marker, message, (Throwable) null);
+    }
+
+    @Override
+    public void log(final Level level, final Marker marker, final CharSequence message, final Throwable t) {
+        if (isEnabled(level, marker, message, t)) {
+            logMessage(FQCN, level, marker, message, t);
+        }
+    }
+
+    @Override
     public void log(final Level level, final Marker marker, final Object message) {
         logIfEnabled(FQCN, level, marker, message, (Throwable) null);
     }
@@ -1527,6 +1619,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void log(final Level level, final CharSequence message) {
+        logIfEnabled(FQCN, level, null, message, null);
+    }
+
+    @Override
+    public void log(final Level level, final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, level, null, message, t);
+    }
+
+    @Override
     public void log(final Level level, final Object message) {
         logIfEnabled(FQCN, level, null, message, null);
     }
@@ -1743,6 +1845,14 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final CharSequence message,
+            final Throwable t) {
+        if (isEnabled(level, marker, message, t)) {
+            logMessage(fqcn, level, marker, message, t);
+        }
+    }
+
+    @Override
     public void logIfEnabled(final String fqcn, final Level level, final Marker marker, final Supplier<?> msgSupplier,
             final Throwable t) {
         if (isEnabled(level, marker, msgSupplier, t)) {
@@ -1865,6 +1975,11 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
         }
     }
 
+    protected void logMessage(final String fqcn, final Level level, final Marker marker, final CharSequence message,
+            final Throwable t) {
+        logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
+    }
+
     protected void logMessage(final String fqcn, final Level level, final Marker marker, final Object message,
             final Throwable t) {
         logMessage(fqcn, level, marker, messageFactory.newMessage(message), t);
@@ -2025,6 +2140,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void trace(final Marker marker, final CharSequence message) {
+        logIfEnabled(FQCN, Level.TRACE, marker, message, null);
+    }
+
+    @Override
+    public void trace(final Marker marker, final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.TRACE, marker, message, t);
+    }
+
+    @Override
     public void trace(final Marker marker, final Object message) {
         logIfEnabled(FQCN, Level.TRACE, marker, message, null);
     }
@@ -2060,6 +2185,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void trace(final CharSequence message) {
+        logIfEnabled(FQCN, Level.TRACE, null, message, null);
+    }
+
+    @Override
+    public void trace(final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.TRACE, null, message, t);
+    }
+
+    @Override
     public void trace(final Object message) {
         logIfEnabled(FQCN, Level.TRACE, null, message, null);
     }
@@ -2326,6 +2461,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void warn(final Marker marker, final CharSequence message) {
+        logIfEnabled(FQCN, Level.WARN, marker, message, null);
+    }
+
+    @Override
+    public void warn(final Marker marker, final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.WARN, marker, message, t);
+    }
+
+    @Override
     public void warn(final Marker marker, final Object message) {
         logIfEnabled(FQCN, Level.WARN, marker, message, null);
     }
@@ -2361,6 +2506,16 @@ public abstract class AbstractLogger implements ExtendedLogger, Serializable {
     }
 
     @Override
+    public void warn(final CharSequence message) {
+        logIfEnabled(FQCN, Level.WARN, null, message, null);
+    }
+
+    @Override
+    public void warn(final CharSequence message, final Throwable t) {
+        logIfEnabled(FQCN, Level.WARN, null, message, t);
+    }
+
+    @Override
     public void warn(final Object message) {
         logIfEnabled(FQCN, Level.WARN, null, message, null);
     }


[12/13] logging-log4j2 git commit: LOG4J2-1326 change log

Posted by rp...@apache.org.
LOG4J2-1326 change log


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

Branch: refs/heads/master
Commit: 35138e9ee2108801d0a680939bd70585e719f79d
Parents: 2bf358d
Author: rpopma <rp...@apache.org>
Authored: Fri Apr 8 00:42:09 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Apr 8 00:42:09 2016 +0900

----------------------------------------------------------------------
 src/changes/changes.xml | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/35138e9e/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a677fa1..f296b9f 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-1326" dev="rpopma" type="add">
+        (GC) Added methods to the Logger interface for logging CharSequence messages.
+      </action>
       <action issue="LOG4J2-1348" dev="ggregory" type="add" due-to="Greg Thomas, Gary Gregory">
         Add an AutoCloseable ThreadContext class: CloseableThreadContext.
       </action>
@@ -31,10 +34,10 @@
         (Doc) Clarify documentation for properties that control Log4j behaviour.
       </action>
       <action issue="LOG4J2-1344" dev="rpopma" type="add">
-        FileAppender, RollingFileAppender and MemoryMappedFileAppender are now also garbage-free by default.
+        (GC) FileAppender, RollingFileAppender and MemoryMappedFileAppender are now also garbage-free by default.
       </action>
       <action issue="LOG4J2-1343" dev="rpopma" type="update">
-        ConsoleAppender is now garbage-free by default. This logic is reusable for all AbstractOutputStreamAppender subclasses.
+        (GC) ConsoleAppender is now garbage-free by default. This logic is reusable for all AbstractOutputStreamAppender subclasses.
       </action>
       <action issue="LOG4J2-1336" dev="ggregory" type="fix" due-to="Zbynek Vyskovsky">
         LoggerFactory in 1.2 API module is not compatible with 1.2.


[08/13] logging-log4j2 git commit: LOG4J2-1326 add methods isEnabled that accepts a CharSequence to subclasses of AbstractLogger

Posted by rp...@apache.org.
LOG4J2-1326 add methods isEnabled that accepts a CharSequence to subclasses of AbstractLogger


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

Branch: refs/heads/master
Commit: 46c3c3b868aef3f8cd2e13dbf9df22da89e2b045
Parents: 7b78739
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:17:07 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:17:07 2016 +0900

----------------------------------------------------------------------
 .../test/java/org/apache/logging/log4j/LambdaLoggerTest.java    | 5 +++++
 1 file changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/46c3c3b8/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
index 06a5b62..f6d1623 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/LambdaLoggerTest.java
@@ -63,6 +63,11 @@ public class LambdaLoggerTest {
         }
 
         @Override
+        public boolean isEnabled(final Level level, final Marker marker, final CharSequence message, final Throwable t) {
+            return enabled;
+        }
+
+        @Override
         public boolean isEnabled(final Level level, final Marker marker, final Object message, final Throwable t) {
             return enabled;
         }


[09/13] logging-log4j2 git commit: LOG4J2-1326 add tests for explicitly logging CharSequence

Posted by rp...@apache.org.
LOG4J2-1326 add tests for explicitly logging CharSequence


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

Branch: refs/heads/master
Commit: 0cec18a9e56ece809ae8e0677553cb9a5dd51105
Parents: 46c3c3b
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:17:36 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:17:36 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/AbstractLoggerTest.java       | 159 +++++++++++++++++++
 1 file changed, 159 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/0cec18a9/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
index 616772f..3fd165d 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/AbstractLoggerTest.java
@@ -35,6 +35,9 @@ import static org.junit.Assert.*;
  *
  */
 public class AbstractLoggerTest extends AbstractLogger {
+    static final StringBuilder CHAR_SEQ = new StringBuilder("CharSeq");
+    private int charSeqCount;
+    private int objectCount;
 
     // TODO add proper tests for ReusableMessage
     @Before
@@ -75,6 +78,7 @@ public class AbstractLoggerTest extends AbstractLogger {
     private static String p1 = "Long Beach";
 
     private static String p2 = "California";
+    private static Message charSeq = new SimpleMessage(CHAR_SEQ);
     private static Message simple = new SimpleMessage("Hello");
     private static Message object = new ObjectMessage(obj);
 
@@ -102,6 +106,10 @@ public class AbstractLoggerTest extends AbstractLogger {
         new LogEvent(marker, simple, t),
         new LogEvent(marker, simple, null),
 
+        new LogEvent(null, charSeq, null),
+        new LogEvent(null, charSeq, t),
+        new LogEvent(marker, charSeq, null),
+        new LogEvent(marker, charSeq, t),
     };
 
     @Override
@@ -155,7 +163,14 @@ public class AbstractLoggerTest extends AbstractLogger {
     }
 
     @Override
+    public boolean isEnabled(final Level level, final Marker marker, final CharSequence data, final Throwable t) {
+        charSeqCount++;
+        return isEnabled(level, marker, new SimpleMessage(data), t);
+    }
+
+    @Override
     public boolean isEnabled(final Level level, final Marker marker, final Object data, final Throwable t) {
+        objectCount++;
         return isEnabled(level, marker, new ObjectMessage(data), t);
     }
 
@@ -327,6 +342,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         debug(MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         debug(MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        debug(CHAR_SEQ);
+        currentEvent = events[16];
+        debug(CHAR_SEQ, t);
+        currentEvent = events[17];
+        debug(MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        debug(MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -369,6 +396,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         error(MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         error(MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        error(CHAR_SEQ);
+        currentEvent = events[16];
+        error(CHAR_SEQ, t);
+        currentEvent = events[17];
+        error(MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        error(MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -411,6 +450,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         fatal(MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         fatal(MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        fatal(CHAR_SEQ);
+        currentEvent = events[16];
+        fatal(CHAR_SEQ, t);
+        currentEvent = events[17];
+        fatal(MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        fatal(MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -453,6 +504,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         info(MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         info(MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        info(CHAR_SEQ);
+        currentEvent = events[16];
+        info(CHAR_SEQ, t);
+        currentEvent = events[17];
+        info(MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        info(MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -495,6 +558,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         log(Level.DEBUG, MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         log(Level.DEBUG, MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        log(Level.DEBUG, CHAR_SEQ);
+        currentEvent = events[16];
+        log(Level.DEBUG, CHAR_SEQ, t);
+        currentEvent = events[17];
+        log(Level.DEBUG, MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        log(Level.DEBUG, MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -537,6 +612,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         log(Level.ERROR, MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         log(Level.ERROR, MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        log(Level.ERROR, CHAR_SEQ);
+        currentEvent = events[16];
+        log(Level.ERROR, CHAR_SEQ, t);
+        currentEvent = events[17];
+        log(Level.ERROR, MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        log(Level.ERROR, MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -579,6 +666,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         log(Level.FATAL, MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         log(Level.FATAL, MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        log(Level.FATAL, CHAR_SEQ);
+        currentEvent = events[16];
+        log(Level.FATAL, CHAR_SEQ, t);
+        currentEvent = events[17];
+        log(Level.FATAL, MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        log(Level.FATAL, MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -621,6 +720,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         log(Level.INFO, MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         log(Level.INFO, MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        log(Level.INFO, CHAR_SEQ);
+        currentEvent = events[16];
+        log(Level.INFO, CHAR_SEQ, t);
+        currentEvent = events[17];
+        log(Level.INFO, MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        log(Level.INFO, MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -663,6 +774,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         log(Level.TRACE, MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         log(Level.TRACE, MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        log(Level.TRACE, CHAR_SEQ);
+        currentEvent = events[16];
+        log(Level.TRACE, CHAR_SEQ, t);
+        currentEvent = events[17];
+        log(Level.TRACE, MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        log(Level.TRACE, MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -705,6 +828,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         log(Level.WARN, MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         log(Level.WARN, MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        log(Level.WARN, CHAR_SEQ);
+        currentEvent = events[16];
+        log(Level.WARN, CHAR_SEQ, t);
+        currentEvent = events[17];
+        log(Level.WARN, MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        log(Level.WARN, MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -747,6 +882,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         trace(MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         trace(MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        trace(CHAR_SEQ);
+        currentEvent = events[16];
+        trace(CHAR_SEQ, t);
+        currentEvent = events[17];
+        trace(MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        trace(MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
     @Test
@@ -789,6 +936,18 @@ public class AbstractLoggerTest extends AbstractLogger {
         warn(MarkerManager.getMarker("TEST"), simple, t);
         currentEvent = events[14];
         warn(MarkerManager.getMarker("TEST"), simple);
+
+        currentEvent = events[15];
+        warn(CHAR_SEQ);
+        currentEvent = events[16];
+        warn(CHAR_SEQ, t);
+        currentEvent = events[17];
+        warn(MarkerManager.getMarker("TEST"), CHAR_SEQ);
+        currentEvent = events[18];
+        warn(MarkerManager.getMarker("TEST"), CHAR_SEQ, t);
+
+        assertEquals("log(CharSeq) invocations", 4, charSeqCount);
+        assertEquals("log(Object) invocations", 5, objectCount);
     }
 
 }


[07/13] logging-log4j2 git commit: LOG4J2-1326 MessageFactory changes to create a CharSequence-based Message

Posted by rp...@apache.org.
LOG4J2-1326 MessageFactory changes to create a CharSequence-based Message


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

Branch: refs/heads/master
Commit: 7b78739616d6e6c3983e1b453f6b015eb09e53ce
Parents: b9c1e2f
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:16:43 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:16:43 2016 +0900

----------------------------------------------------------------------
 .../org/apache/logging/log4j/message/MessageFactory2.java     | 7 +++++++
 .../apache/logging/log4j/message/ReusableMessageFactory.java  | 7 +++++++
 .../org/apache/logging/log4j/spi/MessageFactory2Adapter.java  | 6 ++++++
 3 files changed, 20 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7b787396/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory2.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory2.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory2.java
index f363622..df729ca 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory2.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/MessageFactory2.java
@@ -23,6 +23,13 @@ package org.apache.logging.log4j.message;
  */
 public interface MessageFactory2 extends MessageFactory {
     /**
+     * Creates a new message for the specified CharSequence.
+     * @param charSequence the (potentially mutable) CharSequence
+     * @return a new message for the specified CharSequence
+     */
+    Message newMessage(CharSequence charSequence);
+
+    /**
      * Creates a new parameterized message.
      *
      * @param message a message template, the kind of message template depends on the implementation.

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7b787396/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
index 706e31d..b29d842 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/message/ReusableMessageFactory.java
@@ -76,6 +76,13 @@ public final class ReusableMessageFactory implements MessageFactory2, Serializab
         return result;
     }
 
+    @Override
+    public Message newMessage(final CharSequence charSequence) {
+        ReusableSimpleMessage result = getSimple();
+        result.set(charSequence);
+        return result;
+    }
+
     /**
      * Creates {@link ReusableParameterizedMessage} instances.
      *

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/7b787396/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java
index 2581b6c..ff31515 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/MessageFactory2Adapter.java
@@ -21,6 +21,7 @@ import java.util.Objects;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.MessageFactory;
 import org.apache.logging.log4j.message.MessageFactory2;
+import org.apache.logging.log4j.message.SimpleMessage;
 
 /**
  * Adapts a legacy MessageFactory to the new MessageFactory2 interface.
@@ -39,6 +40,11 @@ public class MessageFactory2Adapter implements MessageFactory2 {
     }
 
     @Override
+    public Message newMessage(final CharSequence charSequence) {
+        return new SimpleMessage(charSequence);
+    }
+
+    @Override
     public Message newMessage(final String message, final Object p0) {
         return wrapped.newMessage(message, p0);
     }


[02/13] logging-log4j2 git commit: LOG4J2-1326 ReusableSimpleMessage test fix

Posted by rp...@apache.org.
LOG4J2-1326 ReusableSimpleMessage test fix


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

Branch: refs/heads/master
Commit: ebadc41b13ae5180389b308bc2b377adc9a9fd2a
Parents: ebb0154
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:05:39 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:05:39 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/message/ReusableSimpleMessageTest.java     | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ebadc41b/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java b/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java
index 47e468a..bd560b0 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/message/ReusableSimpleMessageTest.java
@@ -33,8 +33,8 @@ public class ReusableSimpleMessageTest {
     }
 
     @Test
-    public void testGetFormattedMessage_InitiallyEmpty() throws Exception {
-        assertNull(new ReusableSimpleMessage().getFormattedMessage());
+    public void testGetFormattedMessage_InitiallyStringNull() throws Exception {
+        assertEquals("null", new ReusableSimpleMessage().getFormattedMessage());
     }
 
     @Test
@@ -49,8 +49,8 @@ public class ReusableSimpleMessageTest {
     }
 
     @Test
-    public void testGetFormat_InitiallyEmpty() throws Exception {
-        assertNull(new ReusableSimpleMessage().getFormat());
+    public void testGetFormat_InitiallyStringNull() throws Exception {
+        assertEquals("null", new ReusableSimpleMessage().getFormat());
     }
 
     @Test


[11/13] logging-log4j2 git commit: LOG4J2-1326 ensure that in garbage-free mode, logging a CharSequence does not create temporary objects: CharSequence.toString() should NOT be called

Posted by rp...@apache.org.
LOG4J2-1326 ensure that in garbage-free mode, logging a CharSequence does not create temporary objects: CharSequence.toString() should NOT be called


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

Branch: refs/heads/master
Commit: 2bf358d2909fcb6a392648c73fba71d5066a9f26
Parents: 7b63d6c
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:18:57 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:18:57 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/core/GcFreeLoggingTest.java   | 32 ++++++++++++++++++++
 1 file changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2bf358d2/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTest.java
index eafdac5..b5761f8 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/GcFreeLoggingTest.java
@@ -24,6 +24,7 @@ import com.google.monitoring.runtime.instrumentation.AllocationRecorder;
 import com.google.monitoring.runtime.instrumentation.Sampler;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
 import org.apache.logging.log4j.core.util.Constants;
 import org.junit.Ignore;
@@ -38,6 +39,31 @@ import static org.junit.Assert.*;
  */
 public class GcFreeLoggingTest {
 
+    private static class MyCharSeq implements CharSequence {
+        final String seq = GcFreeLoggingTest.class.toString();
+
+        @Override
+        public int length() {
+            return seq.length();
+        }
+
+        @Override
+        public char charAt(final int index) {
+            return seq.charAt(index);
+        }
+
+        @Override
+        public CharSequence subSequence(final int start, final int end) {
+            return seq.subSequence(start, end);
+        }
+
+        @Override
+        public String toString() {
+            System.err.println("TEMP OBJECT CREATED!");
+            throw new IllegalStateException("TEMP OBJECT CREATED!");
+        }
+    }
+
     @Test
     public void testNoAllocationDuringSteadyStateLogging() throws Throwable {
         if (!Constants.ENABLE_THREADLOCALS || !Constants.ENABLE_DIRECT_ENCODERS) {
@@ -77,6 +103,9 @@ public class GcFreeLoggingTest {
         assertTrue("Constants.ENABLE_THREADLOCALS", Constants.ENABLE_THREADLOCALS);
         assertFalse("Constants.IS_WEB_APP", Constants.IS_WEB_APP);
 
+        MyCharSeq myCharSeq = new MyCharSeq();
+        MarkerManager.getMarker("test"); // initial creation, value is cached
+
         // initialize LoggerContext etc.
         // This is not steady-state logging and will allocate objects.
         final Logger logger = LogManager.getLogger(GcFreeLoggingTest.class.getName());
@@ -113,6 +142,8 @@ public class GcFreeLoggingTest {
         // now do some steady-state logging
         final int ITERATIONS = 5;
         for (int i = 0; i < ITERATIONS; i++) {
+            logger.error(myCharSeq);
+            logger.error(MarkerManager.getMarker("test"), myCharSeq);
             logger.error("Test message");
             logger.error("Test parameterized message {}", "param");
             logger.error("Test parameterized message {}{}", "param", "param2");
@@ -120,6 +151,7 @@ public class GcFreeLoggingTest {
         }
         Thread.sleep(50);
         AllocationRecorder.removeSampler(sampler);
+        Thread.sleep(100);
     }
 
     private static File agentJar() {


[13/13] logging-log4j2 git commit: Merge remote-tracking branch 'origin/master'

Posted by rp...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/master
Commit: fc79e8b67acb523dafb2326f98e6a1103e17c31c
Parents: 35138e9 67ca08b
Author: rpopma <rp...@apache.org>
Authored: Fri Apr 8 00:42:25 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Fri Apr 8 00:42:25 2016 +0900

----------------------------------------------------------------------
 log4j-core/pom.xml                              |  8 ++---
 .../core/jackson/Log4jJsonObjectMapper.java     |  2 +-
 .../core/jackson/Log4jXmlObjectMapper.java      |  2 +-
 .../logging/log4j/MarkerMixInJsonTest.java      | 31 +++++++++++++++++++
 .../apache/logging/log4j/MarkerMixInTest.java   |  8 +++--
 .../logging/log4j/MarkerMixInXmlTest.java       | 31 +++++++++++++++++++
 .../log4j/core/impl/ThrowableProxyTest.java     | 15 +++++++--
 .../log4j/core/jackson/LevelMixInJsonTest.java  | 28 +++++++++++++++++
 .../log4j/core/jackson/LevelMixInTest.java      |  9 ++++--
 .../log4j/core/jackson/LevelMixInXmlTest.java   | 32 ++++++++++++++++++++
 10 files changed, 151 insertions(+), 15 deletions(-)
----------------------------------------------------------------------



[06/13] logging-log4j2 git commit: LOG4J2-1326 add methods isEnabled that accepts a CharSequence to subclasses of AbstractLogger

Posted by rp...@apache.org.
LOG4J2-1326 add methods isEnabled that accepts a CharSequence to subclasses of AbstractLogger


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

Branch: refs/heads/master
Commit: b9c1e2f7baffa1ea79f1de156c6426d55f556a40
Parents: e014796
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:15:43 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:15:43 2016 +0900

----------------------------------------------------------------------
 .../apache/logging/log4j/simple/SimpleLogger.java   |  5 +++++
 .../apache/logging/log4j/status/StatusLogger.java   |  5 +++++
 .../java/org/apache/logging/log4j/TestLogger.java   |  5 +++++
 .../java/org/apache/logging/log4j/core/Logger.java  | 16 ++++++++++++++++
 .../java/org/apache/logging/slf4j/SLF4JLogger.java  |  5 +++++
 5 files changed, 36 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b9c1e2f7/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java
index aea1ff8..b91f3b2 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/simple/SimpleLogger.java
@@ -106,6 +106,11 @@ public class SimpleLogger extends AbstractLogger {
     }
 
     @Override
+    public boolean isEnabled(final Level testLevel, final Marker marker, final CharSequence msg, final Throwable t) {
+        return this.level.intLevel() >= testLevel.intLevel();
+    }
+
+    @Override
     public boolean isEnabled(final Level testLevel, final Marker marker, final Object msg, final Throwable t) {
         return this.level.intLevel() >= testLevel.intLevel();
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b9c1e2f7/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
index 46eb4f8..ebd44d4 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
@@ -343,6 +343,11 @@ public final class StatusLogger extends AbstractLogger {
     }
 
     @Override
+    public boolean isEnabled(final Level level, final Marker marker, final CharSequence message, final Throwable t) {
+        return isEnabled(level, marker);
+    }
+
+    @Override
     public boolean isEnabled(final Level level, final Marker marker, final Object message, final Throwable t) {
         return isEnabled(level, marker);
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b9c1e2f7/log4j-api/src/test/java/org/apache/logging/log4j/TestLogger.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/test/java/org/apache/logging/log4j/TestLogger.java b/log4j-api/src/test/java/org/apache/logging/log4j/TestLogger.java
index 2024831..5f7abb7 100644
--- a/log4j-api/src/test/java/org/apache/logging/log4j/TestLogger.java
+++ b/log4j-api/src/test/java/org/apache/logging/log4j/TestLogger.java
@@ -169,6 +169,11 @@ public class TestLogger extends AbstractLogger {
     }
 
     @Override
+    public boolean isEnabled(final Level level, final Marker marker, final CharSequence msg, final Throwable t) {
+        return true;
+    }
+
+    @Override
     public boolean isEnabled(final Level level, final Marker marker, final Object msg, final Throwable t) {
         return true;
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b9c1e2f7/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java
index 9b2705c..d08dd8a 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/Logger.java
@@ -230,6 +230,11 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> {
     }
 
     @Override
+    public boolean isEnabled(final Level level, final Marker marker, final CharSequence message, final Throwable t) {
+        return privateConfig.filter(level, marker, message, t);
+    }
+
+    @Override
     public boolean isEnabled(final Level level, final Marker marker, final Object message, final Throwable t) {
         return privateConfig.filter(level, marker, message, t);
     }
@@ -564,6 +569,17 @@ public class Logger extends AbstractLogger implements Supplier<LoggerConfig> {
             return level != null && intLevel >= level.intLevel();
         }
 
+        boolean filter(final Level level, final Marker marker, final CharSequence msg, final Throwable t) {
+            final Filter filter = config.getFilter();
+            if (filter != null) {
+                final Filter.Result r = filter.filter(logger, level, marker, msg, t);
+                if (r != Filter.Result.NEUTRAL) {
+                    return r == Filter.Result.ACCEPT;
+                }
+            }
+            return level != null && intLevel >= level.intLevel();
+        }
+
         boolean filter(final Level level, final Marker marker, final Object msg, final Throwable t) {
             final Filter filter = config.getFilter();
             if (filter != null) {

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b9c1e2f7/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
----------------------------------------------------------------------
diff --git a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
index 7ed81ed..33e40c1 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/SLF4JLogger.java
@@ -112,6 +112,11 @@ public class SLF4JLogger extends AbstractLogger {
     }
 
     @Override
+    public boolean isEnabled(final Level level, final Marker marker, final CharSequence data, final Throwable t) {
+        return isEnabledFor(level, marker);
+    }
+
+    @Override
     public boolean isEnabled(final Level level, final Marker marker, final Object data, final Throwable t) {
         return isEnabledFor(level, marker);
     }


[03/13] logging-log4j2 git commit: LOG4J2-1326 add methods to Logger interface that explicitly accept a CharSequence message

Posted by rp...@apache.org.
LOG4J2-1326 add methods to Logger interface that explicitly accept a CharSequence message


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

Branch: refs/heads/master
Commit: 348e5221ca6fbaef3eb1de30bb07c1e8f8ff722e
Parents: ebadc41
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:08:54 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:08:54 2016 +0900

----------------------------------------------------------------------
 .../java/org/apache/logging/log4j/Logger.java   | 244 +++++++++++++++++++
 1 file changed, 244 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/348e5221/log4j-api/src/main/java/org/apache/logging/log4j/Logger.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/Logger.java b/log4j-api/src/main/java/org/apache/logging/log4j/Logger.java
index 4043391..1abdf03 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/Logger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/Logger.java
@@ -132,6 +132,24 @@ public interface Logger {
     void debug(Marker marker, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#DEBUG DEBUG} level.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     */
+    void debug(Marker marker, CharSequence message);
+
+    /**
+     * Logs a message CharSequence at the {@link Level#DEBUG DEBUG} level including the stack trace of the
+     * {@link Throwable} <code>t</code> passed as parameter.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void debug(Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#DEBUG DEBUG} level.
      *
      * @param marker the marker data specific to this log statement
@@ -251,6 +269,22 @@ public interface Logger {
     void debug(MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#DEBUG DEBUG} level.
+     *
+     * @param message the message object to log.
+     */
+    void debug(CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#DEBUG DEBUG} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void debug(CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#DEBUG DEBUG} level.
      *
      * @param message the message object to log.
@@ -660,6 +694,24 @@ public interface Logger {
     void error(Marker marker, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#ERROR ERROR} level.
+     *
+     * @param marker the marker data specific to this log statement.
+     * @param message the message CharSequence to log.
+     */
+    void error(Marker marker, CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param marker the marker data specific to this log statement.
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void error(Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#ERROR ERROR} level.
      *
      * @param marker the marker data specific to this log statement.
@@ -779,6 +831,22 @@ public interface Logger {
     void error(MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#ERROR ERROR} level.
+     *
+     * @param message the message CharSequence to log.
+     */
+    void error(CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#ERROR ERROR} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void error(CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#ERROR ERROR} level.
      *
      * @param message the message object to log.
@@ -1182,6 +1250,24 @@ public interface Logger {
     void fatal(Marker marker, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#FATAL FATAL} level.
+     *
+     * @param marker The marker data specific to this log statement.
+     * @param message the message CharSequence to log.
+     */
+    void fatal(Marker marker, CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param marker The marker data specific to this log statement.
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void fatal(Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#FATAL FATAL} level.
      *
      * @param marker The marker data specific to this log statement.
@@ -1301,6 +1387,22 @@ public interface Logger {
     void fatal(MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#FATAL FATAL} level.
+     *
+     * @param message the message CharSequence to log.
+     */
+    void fatal(CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#FATAL FATAL} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void fatal(CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#FATAL FATAL} level.
      *
      * @param message the message object to log.
@@ -1703,6 +1805,24 @@ public interface Logger {
     void info(Marker marker, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#INFO INFO} level.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     */
+    void info(Marker marker, CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void info(Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#INFO INFO} level.
      *
      * @param marker the marker data specific to this log statement
@@ -1822,6 +1942,22 @@ public interface Logger {
     void info(MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#INFO INFO} level.
+     *
+     * @param message the message CharSequence to log.
+     */
+    void info(CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#INFO INFO} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void info(CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#INFO INFO} level.
      *
      * @param message the message object to log.
@@ -2324,6 +2460,26 @@ public interface Logger {
     void log(Level level, Marker marker, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the given level.
+     *
+     * @param level the logging level
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     */
+    void log(Level level, Marker marker, CharSequence message);
+
+    /**
+     * Logs a CharSequence at the given level including the stack trace of the {@link Throwable} <code>t</code> passed as
+     * parameter.
+     *
+     * @param level the logging level
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void log(Level level, Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the given level.
      *
      * @param level the logging level
@@ -2453,6 +2609,24 @@ public interface Logger {
     void log(Level level, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the given level.
+     *
+     * @param level the logging level
+     * @param message the message CharSequence to log.
+     */
+    void log(Level level, CharSequence message);
+
+    /**
+     * Logs a CharSequence at the given level including the stack trace of the {@link Throwable} <code>t</code> passed as
+     * parameter.
+     *
+     * @param level the logging level
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void log(Level level, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the given level.
      *
      * @param level the logging level
@@ -2887,6 +3061,25 @@ public interface Logger {
     void trace(Marker marker, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#TRACE TRACE} level.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     */
+    void trace(Marker marker, CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     * @see #debug(String)
+     */
+    void trace(Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#TRACE TRACE} level.
      *
      * @param marker the marker data specific to this log statement
@@ -3008,6 +3201,23 @@ public interface Logger {
     void trace(MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#TRACE TRACE} level.
+     *
+     * @param message the message CharSequence to log.
+     */
+    void trace(CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#TRACE TRACE} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     * @see #debug(String)
+     */
+    void trace(CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#TRACE TRACE} level.
      *
      * @param message the message object to log.
@@ -3568,6 +3778,24 @@ public interface Logger {
     void warn(Marker marker, MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#WARN WARN} level.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     */
+    void warn(Marker marker, CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param marker the marker data specific to this log statement
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void warn(Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#WARN WARN} level.
      *
      * @param marker the marker data specific to this log statement
@@ -3687,6 +3915,22 @@ public interface Logger {
     void warn(MessageSupplier msgSupplier, Throwable t);
 
     /**
+     * Logs a message CharSequence with the {@link Level#WARN WARN} level.
+     *
+     * @param message the message CharSequence to log.
+     */
+    void warn(CharSequence message);
+
+    /**
+     * Logs a CharSequence at the {@link Level#WARN WARN} level including the stack trace of the {@link Throwable}
+     * <code>t</code> passed as parameter.
+     *
+     * @param message the message CharSequence to log.
+     * @param t the exception to log, including its stack trace.
+     */
+    void warn(CharSequence message, Throwable t);
+
+    /**
      * Logs a message object with the {@link Level#WARN WARN} level.
      *
      * @param message the message object to log.


[05/13] logging-log4j2 git commit: LOG4J2-1326 add methods isEnabled and logIfEnabled that accept a CharSequence to ExtendedLogger

Posted by rp...@apache.org.
LOG4J2-1326 add methods isEnabled and logIfEnabled that accept a CharSequence to ExtendedLogger


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

Branch: refs/heads/master
Commit: e014796e114f206bd073606ec60436f3e1caf94b
Parents: 9107a04
Author: rpopma <rp...@apache.org>
Authored: Thu Apr 7 22:13:40 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Apr 7 22:13:40 2016 +0900

----------------------------------------------------------------------
 .../logging/log4j/spi/ExtendedLogger.java       | 23 ++++++++++++++++++++
 .../log4j/spi/ExtendedLoggerWrapper.java        | 14 ++++++++++++
 2 files changed, 37 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e014796e/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLogger.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLogger.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLogger.java
index fc3a76c..2e90a03 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLogger.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLogger.java
@@ -49,6 +49,17 @@ public interface ExtendedLogger extends Logger {
      * @param t A Throwable.
      * @return True if logging is enabled, false otherwise.
      */
+    boolean isEnabled(Level level, Marker marker, CharSequence message, Throwable t);
+
+    /**
+     * Determines if logging is enabled.
+     *
+     * @param level The logging Level to check.
+     * @param marker A Marker or null.
+     * @param message The message.
+     * @param t A Throwable.
+     * @return True if logging is enabled, false otherwise.
+     */
     boolean isEnabled(Level level, Marker marker, Object message, Throwable t);
 
     /**
@@ -257,6 +268,18 @@ public interface ExtendedLogger extends Logger {
     void logIfEnabled(String fqcn, Level level, Marker marker, Message message, Throwable t);
 
     /**
+     * Logs a CharSequence message if the specified level is active.
+     *
+     * @param fqcn The fully qualified class name of the logger entry point, used to determine the caller class and
+     *            method when location information needs to be logged.
+     * @param level The logging Level to check.
+     * @param marker A Marker or null.
+     * @param message The CharSequence message.
+     * @param t the exception to log, including its stack trace.
+     */
+    void logIfEnabled(String fqcn, Level level, Marker marker, CharSequence message, Throwable t);
+
+    /**
      * Logs a message if the specified level is active.
      *
      * @param fqcn The fully qualified class name of the logger entry point, used to determine the caller class and

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/e014796e/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLoggerWrapper.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLoggerWrapper.java b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLoggerWrapper.java
index 6c00755..c3fdc88 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLoggerWrapper.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/spi/ExtendedLoggerWrapper.java
@@ -69,6 +69,20 @@ public class ExtendedLoggerWrapper extends AbstractLogger {
      *
      * @param level The logging Level to check.
      * @param marker A Marker or null.
+     * @param message The message CharSequence.
+     * @param t A Throwable.
+     * @return true if the event would be logged for the Level, Marker, Object and Throwable, false otherwise.
+     */
+    @Override
+    public boolean isEnabled(final Level level, final Marker marker, final CharSequence message, final Throwable t) {
+        return logger.isEnabled(level, marker, message, t);
+    }
+
+    /**
+     * Detect if the event would be logged.
+     *
+     * @param level The logging Level to check.
+     * @param marker A Marker or null.
      * @param message The message.
      * @param t A Throwable.
      * @return true if the event would be logged for the Level, Marker, Object and Throwable, false otherwise.