Also, I'd like to see this used from our socket server classes to make sure it fits nicely with that use case.
Gary On Sun, Jul 23, 2017 at 1:05 PM, Gary Gregory <[email protected]> wrote: > OK, but RuntimeException should still never be thrown here... > > Gary > > On Sun, Jul 23, 2017 at 1:02 PM, Mikael Ståldal <[email protected]> wrote: > >> But that's not quite correct. I want to distinguish between unable to >> parse due to malformed input (ParseException), and unable to read from >> input (IOException). When reading from String or byte[], unable to read >> from input shouldn't happen. >> >> >> On 2017-07-23 21:50, Gary Gregory wrote: >> >>> You already declare and throw ParseException, so I would use >>> ParseException. >>> >>> Gary >>> >>> >>> >>> On Sun, Jul 23, 2017 at 11:25 AM, Mikael Ståldal <[email protected]> >>> wrote: >>> >>> Do you have another suggestion? >>>> >>>> >>>> On 2017-07-23 05:01, Gary Gregory wrote: >>>> >>>> -1 to throw new RuntimeException(e) >>>>> >>>>> Gary >>>>> >>>>> On Jul 22, 2017 13:48, <[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/c >>>>> 4814a87 >>>>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/c >>>>> 4814a87 >>>>> >>>>> 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/c >>>>> ore/parser/ >>>>> AbstractJacksonLogEventParser.java >>>>> ---------------------------------------------------------------------- >>>>> diff --git a/log4j-core/src/main/java/org >>>>> /apache/logging/log4j/core/par >>>>> ser/ >>>>> AbstractJacksonLogEventParser.java b/log4j-core/src/main/java/ >>>>> org/apache/logging/log4j/core/parser/AbstractJacksonLogEvent >>>>> Parser.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/c >>>>> ore/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/c >>>>> ore/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/c >>>>> ore/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/c >>>>> ore/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> >>>>> >>>>> >>>>> >>>> >>> >> >
