Great! Gary
On Jul 26, 2017 12:58, "Mikael Ståldal" <[email protected]> wrote: > I have fixed it, see latest master branch: > > https://github.com/apache/logging-log4j2/blob/master/log4j- > core/src/main/java/org/apache/logging/log4j/core/parser/Abst > ractJacksonLogEventParser.java > > > On 2017-07-26 21:44, Gary Gregory wrote: > >> -1 to throwing RuntimeException, again. See the LOG4J2-1986-b branch for a >> solution. >> >> Gary >> >> On Jul 26, 2017 12:34, <[email protected]> wrote: >> >> Repository: logging-log4j2 >>> Updated Branches: >>> refs/heads/master b464da6b0 -> 9576bbfe2 >>> >>> >>> 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/c >>> 4814a87 >>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c >>> 4814a87 >>> >>> Branch: refs/heads/master >>> 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/par >>> ser/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().reader >>> For(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/par >>> ser/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/par >>> ser/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/par >>> ser/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/par >>> ser/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().readerF >>> or(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/par >>> ser/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().reader >>> For(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/par >>> ser/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> >>> >>> >>> >> >
