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>
>>>
>>>
>>>
>>
>

Reply via email to