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.