You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2017/11/06 20:19:06 UTC
logging-log4j2 git commit: LOG4J2-2103 XML encoding for PatternLayout
Repository: logging-log4j2
Updated Branches:
refs/heads/master 16c673b08 -> 70a67801d
LOG4J2-2103 XML encoding for PatternLayout
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/70a67801
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/70a67801
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/70a67801
Branch: refs/heads/master
Commit: 70a67801d8d29d78a00c360b4dd9da9fdea08212
Parents: 16c673b
Author: Mikael Ståldal <mi...@staldal.nu>
Authored: Mon Nov 6 21:18:59 2017 +0100
Committer: Mikael Ståldal <mi...@staldal.nu>
Committed: Mon Nov 6 21:18:59 2017 +0100
----------------------------------------------------------------------
.../core/pattern/EncodingPatternConverter.java | 36 ++++++++++++++++++++
.../pattern/EncodingPatternConverterTest.java | 20 +++++++++++
src/changes/changes.xml | 3 ++
src/site/xdoc/manual/layouts.xml.vm | 16 +++++++--
4 files changed, 73 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/70a67801/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverter.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverter.java
index 9897e9d..4d22ee0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverter.java
@@ -172,6 +172,42 @@ public final class EncodingPatternConverter extends LogEventPatternConverter {
}
}
}
+ },
+
+ /**
+ * XML string escaping as defined in XML specification.
+ *
+ * @see <a href="https://www.w3.org/TR/xml/">XML specification</a>
+ */
+ XML {
+ @Override
+ void escape(final StringBuilder toAppendTo, final int start) {
+ for (int i = toAppendTo.length() - 1; i >= start; i--) { // backwards: length may change
+ final char c = toAppendTo.charAt(i);
+ switch (c) {
+ case '&':
+ toAppendTo.setCharAt(i, '&');
+ toAppendTo.insert(i + 1, "amp;");
+ break;
+ case '<':
+ toAppendTo.setCharAt(i, '&');
+ toAppendTo.insert(i + 1, "lt;");
+ break;
+ case '>':
+ toAppendTo.setCharAt(i, '&');
+ toAppendTo.insert(i + 1, "gt;");
+ break;
+ case '"':
+ toAppendTo.setCharAt(i, '&');
+ toAppendTo.insert(i + 1, "quot;");
+ break;
+ case '\'':
+ toAppendTo.setCharAt(i, '&');
+ toAppendTo.insert(i + 1, "apos;");
+ break;
+ }
+ }
+ }
};
/**
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/70a67801/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
index 57ecbb0..7767fea 100644
--- a/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
+++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/pattern/EncodingPatternConverterTest.java
@@ -86,4 +86,24 @@ public class EncodingPatternConverterTest {
"Test \\r\\n<div class=\"test\">this\\r</div> & \\n<div class='test'>that</div>",
sb.toString());
}
+
+ @Test
+ public void testXmlEscaping() {
+ final LogEvent event = Log4jLogEvent.newBuilder() //
+ .setLoggerName(EncodingPatternConverterTest.class.getName()) //
+ .setLevel(Level.DEBUG) //
+ .setMessage(new SimpleMessage("Test \r\n<div class=\"test\">this</div> & <div class='test'>that</div>"))
+ .build();
+ final StringBuilder sb = new StringBuilder();
+ final LoggerContext ctx = LoggerContext.getContext();
+ final String[] options = new String[]{"%msg", "XML"};
+ final EncodingPatternConverter converter = EncodingPatternConverter
+ .newInstance(ctx.getConfiguration(), options);
+ assertNotNull("Error creating converter", converter);
+ converter.format(event, sb);
+ assertEquals(
+ "Test \r\n<div class="test">this</div> & <div class='test'>that</div>",
+ sb.toString());
+ }
+
}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/70a67801/src/changes/changes.xml
----------------------------------------------------------------------
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 55e53dd..d54484a 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -31,6 +31,9 @@
- "remove" - Removed
-->
<release version="2.10.0" date="2017-MM-DD" description="GA Release 2.10.0">
+ <action issue="LOG4J2-2103" dev="mikes" type="add">
+ XML encoding for PatternLayout.
+ </action>
<action issue="LOG4J2-1203" dev="mikes" type="add" due-to="Robert Turner">
Allow filtering of line breaks in layout pattern.
</action>
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/70a67801/src/site/xdoc/manual/layouts.xml.vm
----------------------------------------------------------------------
diff --git a/src/site/xdoc/manual/layouts.xml.vm b/src/site/xdoc/manual/layouts.xml.vm
index 9d4cd31..ab61955 100644
--- a/src/site/xdoc/manual/layouts.xml.vm
+++ b/src/site/xdoc/manual/layouts.xml.vm
@@ -780,8 +780,8 @@ WARN [main]: Message 2</pre>
</tr>
<tr>
<td align="center">
- <b>enc</b>{<i>pattern</i>}{[HTML|JSON|CRLF]}<br />
- <b>encode</b>{<i>pattern</i>}{[HTML|JSON|CRLF]}
+ <b>enc</b>{<i>pattern</i>}{[HTML|XML|JSON|CRLF]}<br />
+ <b>encode</b>{<i>pattern</i>}{[HTML|XML|JSON|CRLF]}
</td>
<td>
<p>
@@ -811,6 +811,18 @@ WARN [main]: Message 2</pre>
<td>Replaced with the corresponding HTML entity</td>
</tr>
</table>
+ <p>Using the XML encoding format, this follows the escaping rules specified by
+ <a href="https://www.w3.org/TR/xml/">the XML specification</a>:</p>
+ <table>
+ <tr>
+ <th>Character</th>
+ <th>Replacement</th>
+ </tr>
+ <tr>
+ <td>&, <, >, ", '</td>
+ <td>Replaced with the corresponding XML entity</td>
+ </tr>
+ </table>
<p>
Using the JSON encoding format, this follows the escaping rules specified by
<a href="https://www.ietf.org/rfc/rfc4627.txt">RFC 4627 section 2.5</a>: