Hi, Parse exception is missing its serialVersionUID
Gary On Sat, Jul 22, 2017 at 1:48 PM, <[email protected]> wrote: > Repository: logging-log4j2 > Updated Branches: > refs/heads/LOG4J2-1986 [created] c4814a873 > > > LOG4J2-1986 Public API for parsing the output from > JsonLayout/XmlLayout/YamlLayout > into a LogEvent > > > Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo > Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/ > commit/c4814a87 > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/c4814a87 > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c4814a87 > > Branch: refs/heads/LOG4J2-1986 > Commit: c4814a8730eb24bdf89cf23c89b4a957b8418ba5 > Parents: eea873e > Author: Mikael Ståldal <[email protected]> > Authored: Sat Jul 22 22:48:24 2017 +0200 > Committer: Mikael Ståldal <[email protected]> > Committed: Sat Jul 22 22:48:24 2017 +0200 > > ---------------------------------------------------------------------- > .../parser/AbstractJacksonLogEventParser.java | 85 +++++++++++++++ > .../log4j/core/parser/JsonLogEventParser.java | 32 ++++++ > .../log4j/core/parser/LogEventParser.java | 64 ++++++++++++ > .../log4j/core/parser/ParseException.java | 34 ++++++ > .../log4j/core/parser/TextLogEventParser.java | 50 +++++++++ > .../log4j/core/parser/XmlLogEventParser.java | 32 ++++++ > .../log4j/core/parser/YamlLogEventParser.java | 33 ++++++ > .../logging/log4j/core/parser/package-info.java | 20 ++++ > .../core/parser/JsonLogEventParserTest.java | 103 +++++++++++++++++++ > src/changes/changes.xml | 3 + > 10 files changed, 456 insertions(+) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/ > AbstractJacksonLogEventParser.java > ---------------------------------------------------------------------- > diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/AbstractJacksonLogEventParser.java b/log4j-core/src/main/java/ > org/apache/logging/log4j/core/parser/AbstractJacksonLogEventParser.java > new file mode 100644 > index 0000000..8b00e57 > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/ > AbstractJacksonLogEventParser.java > @@ -0,0 +1,85 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */package org.apache.logging.log4j.core.parser; > + > +import com.fasterxml.jackson.core.JsonProcessingException; > +import com.fasterxml.jackson.databind.ObjectReader; > +import org.apache.logging.log4j.core.LogEvent; > +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > +import org.apache.logging.log4j.core.jackson.Log4jJsonObjectMapper; > + > +import java.io.IOException; > +import java.io.InputStream; > +import java.io.Reader; > + > +class AbstractJacksonLogEventParser implements TextLogEventParser { > + final ObjectReader objectReader; > + > + AbstractJacksonLogEventParser(ObjectReader objectReader) { > + this.objectReader = objectReader; > + } > + > + @Override > + public LogEvent parseFrom(InputStream input) throws IOException, > ParseException { > + try { > + return objectReader.readValue(input); > + } catch (JsonProcessingException e) { > + throw new ParseException(e); > + } > + } > + > + @Override > + public LogEvent parseFrom(Reader input) throws IOException, > ParseException { > + try { > + return objectReader.readValue(input); > + } catch (JsonProcessingException e) { > + throw new ParseException(e); > + } > + } > + > + @Override > + public LogEvent parseFrom(String input) throws ParseException { > + try { > + return objectReader.readValue(input); > + } catch (JsonProcessingException e) { > + throw new ParseException(e); > + } catch (IOException e) { > + throw new RuntimeException(e); > + } > + } > + > + @Override > + public LogEvent parseFrom(byte[] input) throws ParseException { > + try { > + return objectReader.readValue(input); > + } catch (JsonProcessingException e) { > + throw new ParseException(e); > + } catch (IOException e) { > + throw new RuntimeException(e); > + } > + } > + > + @Override > + public LogEvent parseFrom(byte[] input, int offset, int length) > throws ParseException { > + try { > + return objectReader.readValue(input, offset, length); > + } catch (JsonProcessingException e) { > + throw new ParseException(e); > + } catch (IOException e) { > + throw new RuntimeException(e); > + } > + } > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/ > JsonLogEventParser.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/JsonLogEventParser.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/JsonLogEventParser.java > new file mode 100644 > index 0000000..218de0b > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/JsonLogEventParser.java > @@ -0,0 +1,32 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +package org.apache.logging.log4j.core.parser; > + > +import org.apache.logging.log4j.core.LogEvent; > +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > +import org.apache.logging.log4j.core.jackson.Log4jJsonObjectMapper; > + > +/** > + * Parse the output from JsonLayout layout into instances of {@link > LogEvent}. > + */ > +public class JsonLogEventParser extends AbstractJacksonLogEventParser { > + > + public JsonLogEventParser() { > + super(new Log4jJsonObjectMapper().readerFor(Log4jLogEvent.class) > ); > + } > + > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > core/parser/LogEventParser.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/LogEventParser.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/LogEventParser.java > new file mode 100644 > index 0000000..88e84fb > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/LogEventParser.java > @@ -0,0 +1,64 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +package org.apache.logging.log4j.core.parser; > + > +import org.apache.logging.log4j.core.LogEvent; > + > +import java.io.IOException; > +import java.io.InputStream; > + > +/** > + * Parse the output from a layout into instances of {@link LogEvent}. > + */ > +public interface LogEventParser { > + > + /** > + * Parse from an InputStream. The input stream may contain multiple > log events. > + * This method will read one log event and leave the stream open and > positioned to read the > + * next log event. > + * > + * @param input the input stream > + * > + * @return the parsed LogEvent, or {@literal null} of end of input is > reached. > + * @throws IOException if unable to read from the input > + * @throws ParseException if the input is malformed and cannot be > parsed as a LogEvent > + */ > + LogEvent parseFrom(InputStream input) throws IOException, > ParseException; > + > + /** > + * Parse from a byte array, which is expected to contain exactly one > log event. > + * > + * @param input the byte array > + * > + * @return the parsed LogEvent, never {@literal null}. > + * @throws ParseException if the input is malformed and cannot be > parsed as a LogEvent > + */ > + LogEvent parseFrom(byte[] input) throws ParseException; > + > + /** > + * Parse from a specified range of a byte array. The specified range > is expected to contain > + * exactly one log event. > + * > + * @param input the byte array > + * @param offset the initial offset > + * @param length the length > + * > + * @return the parsed LogEvent, never {@literal null}. > + * @throws ParseException if the input is malformed and cannot be > parsed as a LogEvent > + */ > + LogEvent parseFrom(byte[] input, int offset, int length) throws > ParseException; > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > core/parser/ParseException.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/ParseException.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/ParseException.java > new file mode 100644 > index 0000000..8f5fa54 > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/ParseException.java > @@ -0,0 +1,34 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +package org.apache.logging.log4j.core.parser; > + > +/** > + * Thrown when the input cannot be parsed. > + */ > +public class ParseException extends Exception { > + public ParseException(String message) { > + super(message); > + } > + > + public ParseException(String message, Throwable cause) { > + super(message, cause); > + } > + > + public ParseException(Throwable cause) { > + super(cause); > + } > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/ > TextLogEventParser.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/TextLogEventParser.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/TextLogEventParser.java > new file mode 100644 > index 0000000..3428024 > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/TextLogEventParser.java > @@ -0,0 +1,50 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +package org.apache.logging.log4j.core.parser; > + > +import org.apache.logging.log4j.core.LogEvent; > + > +import java.io.IOException; > +import java.io.Reader; > + > +/** > + * Parse the output from a text based layout into instances of {@link > LogEvent}. > + */ > +public interface TextLogEventParser extends LogEventParser { > + /** > + * Parse from a Reader. The reader may contain multiple log events. > + * This method will read one log event and leave the reader open and > positioned to read the > + * next log event. > + * > + * @param input the reader > + * > + * @return the parsed LogEvent, or {@literal null} of end of input is > reached. > + * @throws IOException if unable to read from the input > + * @throws ParseException if the input is malformed and cannot be > parsed as a LogEvent > + */ > + LogEvent parseFrom(Reader input) throws IOException, ParseException; > + > + /** > + * Parse from a String, which is expected to contain exactly one log > event. > + * > + * @param input the string > + * > + * @return the parsed LogEvent > + * @throws ParseException if the input is malformed and cannot be > parsed as a LogEvent > + */ > + LogEvent parseFrom(String input) throws ParseException; > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > core/parser/XmlLogEventParser.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/XmlLogEventParser.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/XmlLogEventParser.java > new file mode 100644 > index 0000000..597e70b > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/XmlLogEventParser.java > @@ -0,0 +1,32 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +package org.apache.logging.log4j.core.parser; > + > +import org.apache.logging.log4j.core.LogEvent; > +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > +import org.apache.logging.log4j.core.jackson.Log4jXmlObjectMapper; > + > +/** > + * Parse the output from XmlLayout layout into instances of {@link > LogEvent}. > + */ > +public class XmlLogEventParser extends AbstractJacksonLogEventParser { > + > + public XmlLogEventParser() { > + super(new Log4jXmlObjectMapper().readerFor(Log4jLogEvent.class)); > + } > + > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/ > YamlLogEventParser.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/YamlLogEventParser.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/YamlLogEventParser.java > new file mode 100644 > index 0000000..59b3463 > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/YamlLogEventParser.java > @@ -0,0 +1,33 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +package org.apache.logging.log4j.core.parser; > + > +import org.apache.logging.log4j.core.LogEvent; > +import org.apache.logging.log4j.core.impl.Log4jLogEvent; > +import org.apache.logging.log4j.core.jackson.Log4jXmlObjectMapper; > +import org.apache.logging.log4j.core.jackson.Log4jYamlObjectMapper; > + > +/** > + * Parse the output from YamlLayout layout into instances of {@link > LogEvent}. > + */ > +public class YamlLogEventParser extends AbstractJacksonLogEventParser { > + > + public YamlLogEventParser() { > + super(new Log4jYamlObjectMapper().readerFor(Log4jLogEvent.class) > ); > + } > + > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/main/java/org/apache/logging/log4j/ > core/parser/package-info.java > ---------------------------------------------------------------------- > diff --git > a/log4j-core/src/main/java/org/apache/logging/log4j/core/parser/package-info.java > b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/package-info.java > new file mode 100644 > index 0000000..3506570 > --- /dev/null > +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/ > parser/package-info.java > @@ -0,0 +1,20 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +/** > + * Parsers for the output of various layouts. > + */ > +package org.apache.logging.log4j.core.parser; > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/log4j-core/src/test/java/org/apache/logging/log4j/core/parser/ > JsonLogEventParserTest.java > ---------------------------------------------------------------------- > diff --git a/log4j-core/src/test/java/org/apache/logging/log4j/core/ > parser/JsonLogEventParserTest.java b/log4j-core/src/test/java/ > org/apache/logging/log4j/core/parser/JsonLogEventParserTest.java > new file mode 100644 > index 0000000..5684602 > --- /dev/null > +++ b/log4j-core/src/test/java/org/apache/logging/log4j/core/ > parser/JsonLogEventParserTest.java > @@ -0,0 +1,103 @@ > +/* > + * Licensed to the Apache Software Foundation (ASF) under one or more > + * contributor license agreements. See the NOTICE file distributed with > + * this work for additional information regarding copyright ownership. > + * The ASF licenses this file to You under the Apache license, Version 2.0 > + * (the "License"); you may not use this file except in compliance with > + * the License. You may obtain a copy of the License at > + * > + * http://www.apache.org/licenses/LICENSE-2.0 > + * > + * Unless required by applicable law or agreed to in writing, software > + * distributed under the License is distributed on an "AS IS" BASIS, > + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > implied. > + * See the license for the specific language governing permissions and > + * limitations under the license. > + */ > +package org.apache.logging.log4j.core.parser; > + > +import org.apache.logging.log4j.core.LogEvent; > +import org.junit.Before; > +import org.junit.Test; > + > +import static org.junit.Assert.assertEquals; > +import static org.junit.Assert.assertNotNull; > + > +public class JsonLogEventParserTest { > + > + private JsonLogEventParser parser; > + > + private static final String JSON = "{\n" + > + " \"timeMillis\" : 1493121664118,\n" + > + " \"thread\" : \"main\",\n" + > + " \"level\" : \"INFO\",\n" + > + " \"loggerName\" : \"HelloWorld\",\n" + > + " \"marker\" : {\n" + > + " \"name\" : \"child\",\n" + > + " \"parents\" : [ {\n" + > + " \"name\" : \"parent\",\n" + > + " \"parents\" : [ {\n" + > + " \"name\" : \"grandparent\"\n" + > + " } ]\n" + > + " } ]\n" + > + " },\n" + > + " \"message\" : \"Hello, world!\",\n" + > + " \"thrown\" : {\n" + > + " \"commonElementCount\" : 0,\n" + > + " \"name\" : \"java.lang.RuntimeException\",\n" + > + " \"extendedStackTrace\" : [ {\n" + > + " \"class\" : \"logtest.Main\",\n" + > + " \"method\" : \"main\",\n" + > + " \"file\" : \"Main.java\",\n" + > + " \"line\" : 29,\n" + > + " \"exact\" : true,\n" + > + " \"location\" : \"classes/\",\n" + > + " \"version\" : \"?\"\n" + > + " } ]\n" + > + " },\n" + > + " \"contextStack\" : [ \"one\", \"two\" ],\n" + > + " \"endOfBatch\" : false,\n" + > + " \"loggerFqcn\" : > \"org.apache.logging.log4j.spi.AbstractLogger\",\n" > + > + " \"contextMap\" : {\n" + > + " \"bar\" : \"BAR\",\n" + > + " \"foo\" : \"FOO\"\n" + > + " },\n" + > + " \"threadId\" : 1,\n" + > + " \"threadPriority\" : 5,\n" + > + " \"source\" : {\n" + > + " \"class\" : \"logtest.Main\",\n" + > + " \"method\" : \"main\",\n" + > + " \"file\" : \"Main.java\",\n" + > + " \"line\" : 29\n" + > + " }\n" + > + "}"; > + > + @Before > + public void setup() { > + parser = new JsonLogEventParser(); > + } > + > + @Test > + public void testString() throws ParseException { > + LogEvent logEvent = parser.parseFrom(JSON); > + assertNotNull(logEvent); > + assertEquals("HelloWorld", logEvent.getLoggerName()); > + // TODO assert more here > + } > + > + @Test(expected = ParseException.class) > + public void testStringEmpty() throws ParseException { > + parser.parseFrom(""); > + } > + > + @Test(expected = ParseException.class) > + public void testStringInvalidJson() throws ParseException { > + parser.parseFrom("foobar"); > + } > + > + @Test(expected = ParseException.class) > + public void testStringInvalidProperty() throws ParseException { > + parser.parseFrom("{\"foo\":\"bar\"}"); > + } > + > +} > > http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ > c4814a87/src/changes/changes.xml > ---------------------------------------------------------------------- > diff --git a/src/changes/changes.xml b/src/changes/changes.xml > index 074e31c..522f49b 100644 > --- a/src/changes/changes.xml > +++ b/src/changes/changes.xml > @@ -31,6 +31,9 @@ > - "remove" - Removed > --> > <release version="2.9.0" date="2017-MM-DD" description="GA Release > 2.9.0"> > + <action issue="LOG4J2-1986" dev="mikes" type="add"> > + Public API for parsing the output from > JsonLayout/XmlLayout/YamlLayout > into a LogEvent. > + </action> > <action issue="LOG4J2-1984" dev="rgoers" type="update"> > Allow maxLength of StructuredData to be specified by the user. > </action> > >
